我有这种奇怪的情况,不知道出了什么问题。我有一个简单的自我加入,根据一些条件找到匹配。我有这个查询在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,它将再次起作用。我也试过其他专栏并发现了同样的问题。
任何指针?
答案 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'))
两者基本相同,因此请根据您的喜好使用。