使用 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 变量超出范围。

要从父作用域继承$iduse它在传递回调时。

$id = $request->user_id;

DB::table('users')->leftJoin('messages', function($query) use ($id) {
    // $id is now available here
});