首页 > 解决方案 > 在 Laravel 中加入多个条件

问题描述

我正在尝试使用多个条件连接两个表。由于第二个连接条件,以下查询不起作用。

 $all_update = DB::table('posts as p')
      ->join('cprefs as c','p.qatype', '=', 'c.qatype')
      ->where('c.wwide', '=', 'p.wwide') //second join condition
      ->where('c.user_id', $u_id)
      ->where('p.arank', 1)
      ->get();

标签: phplaravel

解决方案


where()函数期望最后一个参数是您传入列名的参数 。
要比较两列,您应该使用该whereColumn方法。

考虑到这一点,您还可以编写如下代码:

$all_update = DB::table('posts as p') 
 ->join('cprefs as c','p.qatype', '=', 'c.qatype')
 ->whereColumn('c.wwide', '=', 'p.wwide') //second join condition
 ->where('c.user_id', $u_id) 
 ->where('p.arank', 1) 
 ->get();

但是,只有在您的情况下,连接是正确的,这才能正常工作INNER JOIN
添加多个连接子句的正确方法如下

$all_update = DB::table('posts as p') 
->join('cprefs as c', function($q) {
    $q->on('p.qatype', '=', 'c.qatype')
       ->on('c.wwide', '=', 'p.wwide'); //second join condition
}) 
->where('c.user_id', $u_id) 
->where('p.arank', 1) 
->get();

就用这个吧。


推荐阅读