将SQL转换为Laravel Elount
我有一个SQL查询:将SQL转换为Laravel Elount,laravel,eloquent,Laravel,Eloquent,我有一个SQL查询: SELECT m1.id FROM messages m1 WHERE m1.to_id = 1 AND m1.created_at < ( SELECT m2.created_at FROM messages m2 WHERE m2.from_id = m1.to_id AND m2.to_id = m1.from_id) GROUP BY m1.id 我怎样才能转化成雄辩的人?直到
SELECT
m1.id
FROM
messages m1
WHERE
m1.to_id = 1 AND m1.created_at < (
SELECT
m2.created_at
FROM
messages m2
WHERE
m2.from_id = m1.to_id AND m2.to_id = m1.from_id)
GROUP BY
m1.id
我怎样才能转化成雄辩的人?直到现在我才这么做,但a不知道在子查询的where部分该做什么
Message::where('to_id', 1)
->where('created_at', '<', function($q) {
$q->from('messages');
$q->select('created_at');
})
->select('id')
->groupBy('id')
->get();
您可以尝试以下方法:
Message::where('to_id', 1)
->where('created_at', '<', function($q) {
$q->from('messages AS m2')
->select('created_at')
->where('m2.from_id ','=', 'messages.to_id ')
->where('m2.to_id','=','messages.from_id');
})
->select('id')
->groupBy('id')
->get();
代码执行,但找不到任何结果。当我在数据库上运行sql时,它返回正常值。我认为问题在于子查询的位置,因为我用数字替换它们并返回结果。我这样做只是为了测试。->其中'm2.from_id','=','1'->其中'm2.to_id','=','2';您必须使用whereColumn而不是where。