laravel5.8左连接右表如何为null?

查询语句如下:DB::table('appasa')->where('a.status',1)->join('my_appasm',function($join){$jo... 查询语句如下:DB::table('app as a') ->where('a.status',1) ->join('my_app as m',function($join){ $join->on('m.app_id','=','a.id')->where('m.user_id','=','1'); }) ->select('a.id','a.name','m.count','m.score') ->get()->toArray();图1app表,图2my_app表,图3为查询结果。请问如何查询出其他的app数据并且右表没有数据则为null,已经尝试将函数里的where改为on,但是会将'1'作为列去查询,报错。 展开
 我来答
折柳成萌
高粉答主

2019-12-20 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:4.4万
采纳率:96%
帮助的人:6174万
展开全部

有两种方法供你选择:

  • 使用Laravel集合的 map 方法。该方法适用于单个表单。

  • 使用中间件。该方法适用于有多个表蚂渣桐单

  • 单个表单

    可以使用集合闷坦的map方法进行过滤,然后使用得到的 $params 进行操作。

  • public function post(Request $request){    // 过滤空值,并且trim


  • $params = collect($request)->map(function ($item) {        if (is_string($item)) {


  • $item = empty(trim($item)) ? null : trim($item);


  • }        return $item;


  • });    // 现在表单的内容在 $params 中了,并且去掉了空值}


  • 关于里面函数的具体意义请参考官方文档。

    多个表单

    首先推荐看一下梁厅官方文档。 其实也是使用了上面的代码进行过滤,不过这是在中间件中进行的,只要在需要进行过滤的路由中使用这个中间件即可做到,这样无需再每一个Controller中写一遍了。

  • 先用 php artisan make:middleware RejectEmptyValues 命令创建一个中间件。 此命令将会在 app/Http/Middleware 目录内设定一个名称为 RejectEmptyValues 的类。

  • 修改 RejectEmptyValues 的代码

    <?phpnamespace App\Http\Middleware;use Closure;class RejectEmptyValues{    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request $request
    * @param  \Closure $next
    * @return mixed
    */
    public function handle($request, Closure $next)
    {        // 过滤空值,并且trim
    $params = collect($request)->map(function ($item) {            if (is_string($item)) {
    $item = empty(trim($item)) ? null : trim($item);
    }            return $item;
    });
    $request->replace($params->all());        return $next($request);
    }
    }

  • 注册中间件,在 app/Http/Kernel.php 文件的 $routeMiddleware 中加入一行

    'reject_empty_values' => \App\Http\Middleware\RejectEmptyValues::class,

  • 使用中间件示例,

    Route::post('/test','TestController@post')->middleware('reject_empty_values');

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式