【发布时间】:2017-06-06 19:33:25
【问题描述】:
我在将我的 SQL 查询转换为 laravel 查询时遇到问题。我想加入两个表users 和messages,这样我就可以获得与其他用户对话的用户。
数据库结构:
消息:
这是我得到我想要的东西的 SQL 查询:
SELECT u.id, c.id, u.first_name, u.last_name FROM messages c, users u
WHERE (CASE WHEN c.user_one = @USERID THEN c.user_two = u.ID WHEN c.user_two = @USERID THEN c.user_one= u.id END )
AND ( c.user_one = @USERID OR c.user_two = @USERID ) Order by c.id DESC Limit 20
这是我的 Laravel 查询:
DB::table('messages')
->join('users', function($join) use ($user_id) {
$join->select(DB::raw('CASE WHEN messages.user_one = ' . $user_id . ' THEN messages.user_two = ' . $user_id . 'WHEN messages.user_two = ' . $user_id . ' THEN messages.user_one = ' . $user_id));
$join->on(function($query) use ($user_id)
{
$query->where('messages.user_one', '=', $user_id);
$query->orWhere('messages.user_two', '=',$user_id);
});
})
->select('users.*', 'messages.*')
->get();
【问题讨论】:
-
@userid 是在哪里定义的?
-
“与其他用户有对话的用户”是什么意思?您希望所有用户都在列 user_one 或 user_two 中的消息表中?
-
@Strawberry 它作为参数传递,
function getMessage($user_id)@Autista_z 换句话说,我只想显示当前用户的所有对话。
标签: mysql laravel laravel-5.4