Laravel框架学习笔记(三)

作者:南丞 时间:2017-11-17 08:30

Laravel框架学习笔记(三)之 Eloquent 操作

闲话不多说,直接起飞:

  1. Eloquent 的 all 方法返回模型表的所有结果,由于每一个 Eloquent 模型都是一个查询构建器,你还可以添加约束条件到查询,然后使用 get 方法获取对应结果:
    $flights = App\Flight::where('active', 1)
               ->orderBy('name', 'desc')
               ->take(10)
               ->get();

注:由于 Eloquent 模型本质上就是查询构建器,可以在Eloquent查询中使用查询构建器的所有方法。 比如: where(‘id’,’<>’,5) 等

  1. 查询构造器常用的方法:

         first();  从数据表中获取一行数据
         value();  从结果中获取单个值
         pluck();  获取包含单个列值的数组,列值指定自定义键(第二个参数)
         count();
         max();
         avg();
         sum();
         Select('字段');
         orderBy();
    
    

    where 写法:

     where('id','<>',5)
    
     where([
         ['status', '=', '1'],
         ['subscribed', '<>', '1'],
     ])
    
     whereBetween 方法验证列值是否在给定值之间
        whereBetween('votes', [1, 100])
    
     whereIn 方法验证给定列的值是否在给定数组中
        whereIn('id', [1, 2, 3])
    
     whereNull 方法验证给定列的值为NULL
        whereNull('updated_at')
    
     whereDate 方法用于比较字段值和日期
         whereDate('created_at', '2016-10-10')
    
     whereColumn 方法用于验证两个字段是否相等
         whereColumn('first_name', 'last_name')
    
    

    查询排序

         latest()  
         oldest()
         latest 和 oldest 方法允许你通过日期对结果进行排序,默认情况下,结果集通过 created_at 字段进行排序
    

    插入

         insertGetId ()   使用insertGetId方法来插入记录并返回ID值:
    
    

3, 模板中输出带有html文本的内容

```
    {!!  !!}
``` 4, 开启debugbar  

composer.json 文件中 ```php
  "barryvdh/laravel-debugbar": "^2.3", ```

app.php 中 的 providers中 添加

```php
     'Barryvdh\Debugbar\ServiceProvider',
```

5, 配置使用多路由文件

在 app/Providers/RouteServiceProvider.php 的 map 方法中可以如下定义:

public function map(Router $router)
{
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        $this->mapAdminRoutes();
}

 protected function mapAdminRoutes()
    {
        Route::group([
            'prefix'=>'/admin',
            'middleware' => 'admin',
            'namespace' => 'App\Http\Controllers\Admin',
        ], function ($router) {
            require base_path('routes/admin.php');
        });
    }

6, 在使用框架的时候加一个Service层 然后在控制器中 直接去new这个Service层 也可以使用契约 把这个做成一个服务


        1,在app下新建一个contracts 文件夹 用来存放我们自定义的契约
            新建文件定义一个契约接口TestContract。

            <?php

            namespace App\Contracts;

            interface TestContract
            {
                public function callMe($controller);
            }

        2,在Services 新建一个 TestService

        <?php

            namespace App\Services;

            use App\Contracts\TestContract;

            class TestService implements TestContract
            {
                public function callMe($controller)
                {
                    dd('Call Me From TestServiceProvider In '.$controller);
                }
            }

        3,接下来我们定义一个服务提供者TestServiceProvider用于注册该类到容器创建服务提供者可以使用如下Artisan命令

            php artisan make:provider TestServiceProvider


        4,修改生成的TestServiceProvider.php

          public function register()
            {
                //使用singleton绑定单例
                $this->app->singleton('test',function(){
                    return new TestService();
                });

                //使用bind绑定实例到接口以便依赖注入
                $this->app->bind('App\Contracts\TestContract',function(){
                    return new TestService();
                });
            }

        5,注册服务提供者

        'providers' => [

                    //其他服务提供者

                    App\Providers\TestServiceProvider::class,
                ],

7, 文件上传

 //打开config/filesystems.php 找到 disks

 'disks' => [

    // 上面还有很多,下面是自己加的
    // 新建一个本地端uploads空间(目录) 用于存储上传的文件
        'uploads' => [

            'driver' => 'local',

            // 文件将上传到storage/app/uploads目录
            'root' => storage_path('app/uploads'),

            // 文件将上传到public/uploads目录 如果需要浏览器直接访问 请设置成这个
            //'root' => public_path('uploads'),
        ],
]  

//新建一个上传Controller

namespace App\Api\V1\Controllers\Upload;


use Dingo\Api\Http\Request;
use Dingo\Api\Exception\StoreResourceFailedException;
use Storage;

class UploadFiles
{
    public function upfile(Request $request) {
        if (!$request->hasFile('file')) {
            return response()->json([], 500, '无法获取上传文件');
        }
        $file = $request->file('file');

        if ($file->isValid()) {
            // 获取文件相关信息
            $originalName = $file->getClientOriginalName(); // 文件原名
            $ext = $file->getClientOriginalExtension();     // 扩展名
            $realPath = $file->getRealPath();   //临时文件的绝对路径
            $type = $file->getClientMimeType();     // image/jpeg

            // 上传文件
            $filename = date('Ymd/His');
            // 使用我们新建的uploads本地存储空间(目录)
            $path = $file->store($filename, 'uploads');
            return response()->json([
                'status_code' => 200,
                'message' => 'success',
                'photo' => $path,
                'name' => $originalName,
            ]);

        } else {
            return response()->json([], 500, '文件未通过验证');
        }
    }
}

8,model注入:

public function destroy(Article $article)
{

}

*: Article Model类必须与路由一致**

9, 排除 CSRF 保护

    中间件VerifyCsrfToken   设置
        $except 的内容就Ok了

评论:

回到顶部
回到顶部