自联接条件在PHP中失败但在mysql中有效

时间:2014-11-22 19:18:44

标签: php mysql laravel

我有这种奇怪的情况,不知道出了什么问题。我有一个简单的自我加入,根据一些条件找到匹配。我有这个查询在mysql中正常运行,但是当我通过PHP调用它时,它不会返回任何值。

select * from Requests p inner join Requests c on c.ID<>p.ID
where usr_ID<>4
and p.c_ID = c.c_ID

这种方法很好但不是下面的方法。

DB::table('Requests as parent')
  ->join('Requests as child', 'parent.ID', '<>', 'child.ID')
  ->where('parent.usr_ID', '<>', 4)
  **->where('parent.c_ID', '=', 'child.c_ID')**
  ->get();

在上面的查询中,如果我删除第二个where条件(c_ID),它将返回正确的值。对于所有行,其值为1.如果我将child.c_ID或parent.c_ID替换为1,它将再次起作用。我也试过其他专栏并发现了同样的问题。

任何指针?

1 个答案:

答案 0 :(得分:1)

查询构建器从您的第二个条件所在的位置开始:

WHERE parent.c_ID = 'child.c_ID'

所以不是&#34;正常&#34; where()使用whereRaw(),它接受​​您的输入并将其直接注入最终的SQL查询

->whereRaw('parent.c_ID = child.c_ID')

或者你也可以在第三个参数上使用DB::raw()

->where('parent.c_ID', '=', DB::raw('child.c_ID'))

两者基本相同,因此请根据您的喜好使用。