使用 join in laravel 在 whereraw 查询中绑定参数
bind parameter in whereraw query with join in laravel
下面是我的代码,用于连接两个表并获取特定 user_id 的最新消息,但我无法将参数传递到 whereRaw 子句。我试了好几种方法都没有结果。
$id = $request->user_id;
$chats = DB::table('users')
->leftJoin('messages', function($query)
{
$query->on('users.id', '=', 'messages.to_id')
->whereRaw('messages.id IN (select MAX(messages.id) from messages join users on users.id = messages.to_id where messages.to_id = ? group by users.id)',[$id]);
})
->select('users.id as user_id', 'users.name', DB::raw('CONCAT("https://www.interwebs.co.in/puzzle/attach/", users.avatar) AS image') , 'users.mobile', 'messages.id', 'messages.from_id', 'messages.to_id', 'messages.body as message', 'messages.attachment', 'messages.seen as seen_count', 'messages.created_at')
->where('messages.from_id', $request->user_id)
->orWhere('messages.to_id', $request->user_id)
->get();
每次未定义的变量 $id 都显示相同的错误。
当回调传递给 leftJoin
方法时,您的 $id
变量超出范围。
要从父作用域继承$id
,use
它在传递回调时。
$id = $request->user_id;
DB::table('users')->leftJoin('messages', function($query) use ($id) {
// $id is now available here
});
下面是我的代码,用于连接两个表并获取特定 user_id 的最新消息,但我无法将参数传递到 whereRaw 子句。我试了好几种方法都没有结果。
$id = $request->user_id;
$chats = DB::table('users')
->leftJoin('messages', function($query)
{
$query->on('users.id', '=', 'messages.to_id')
->whereRaw('messages.id IN (select MAX(messages.id) from messages join users on users.id = messages.to_id where messages.to_id = ? group by users.id)',[$id]);
})
->select('users.id as user_id', 'users.name', DB::raw('CONCAT("https://www.interwebs.co.in/puzzle/attach/", users.avatar) AS image') , 'users.mobile', 'messages.id', 'messages.from_id', 'messages.to_id', 'messages.body as message', 'messages.attachment', 'messages.seen as seen_count', 'messages.created_at')
->where('messages.from_id', $request->user_id)
->orWhere('messages.to_id', $request->user_id)
->get();
每次未定义的变量 $id 都显示相同的错误。
当回调传递给 leftJoin
方法时,您的 $id
变量超出范围。
要从父作用域继承$id
,use
它在传递回调时。
$id = $request->user_id;
DB::table('users')->leftJoin('messages', function($query) use ($id) {
// $id is now available here
});