2017-11-17-Laravel学习笔记(三)

layouttitledateauthordescin_head
post
Laravel框架学习笔记(三)
2017-11-17 16:30:02 +0800
南丞
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
<style> .article-content p{ text-indent: 2em; line-height: 1.75rem; }</style>

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 文件中
      "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了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值