在我的控制器中,我有以下代码:
$threads = MessageThread::whereExists(function($query) {
$messid = '`' . env('DB_PREFIX') . 'message_threads`.`id`';
$query->select(\DB::raw(1))
->from('message_thread_participants')
->where('message_thread_participants.message_thread_id', '=', $messid); // AND message_thread_participants.user_id = ' . $user_id);
})
->orderBy('message_threads.created_at', 'DESC')
->take(30)
->get();
如果我使用DB :: getQueryLog()打印出结果查询,我会得到以下内容:
[{ “query”:“select * from
bd45_message_threads
where exists(从bd45_message_thread_participants
中选择1,其中bd45_message_thread_participants
。message_thread_id
=?)排序依据bd45_message_threads
。created_at
desc limit 30“, “绑定”:[ “bd45_message_threads
。id
” ] “时间”:1.06}]
我手动运行该查询(用绑定代替?,我得到预期的30个结果.....但代码本身没有返回结果......我认为使用模型和Where存在之间存在一些问题。 ..但现在只是猜测....任何人都有任何线索为什么查询会返回Navicat或PHPMyAdmin中的结果,但控制器返回一个空白数组?
答案 0 :(得分:0)
我参加聚会有点晚了,但如果有人有同样的问题,那一定是因为你必须使用
->whereColumn('bd45_message_thread_participants.message_thread_id', 'bd45_message_threads.id')
比较两列值。 ->where
期望比较列和值,而不是另一列。