在我的laravel5.7/eloquent/mysql 5.5应用程序中,我需要在chats列表中获取任何聊天记录的消息值,并为给定的useronly($user\u id)再获取一列任何聊天记录的消息:
我试着:
$chats = Chat
::select( \DB::raw( ' chats.*, count(cm.id) as messages_count, count(cmu.id) as user_messages_count' ) )
->orderBy('name', 'asc')
->groupBy('chats.id')
->leftJoin( \DB::raw('chat_messages as cm'), \DB::raw('cm.chat_id'), '=', \DB::raw('chats.id') )
->leftJoin( \DB::raw('chat_messages as cmu'), \DB::raw(' cmu.chat_id = chats.id and cmu.chat_id = ' .$user_id ) )
->get();
但错误是:
Column not found: 1054 Unknown column '' in 'on clause'.
看起来for leftjoin表达式不能与空值参数一起使用。或者以其他方式?
$chats = Chat
::select( \DB::raw( ' chats.*, count(cm.id) as messages_count, count(cmu.id) as user_messages_count' ) )
->orderBy('name', 'asc')
->groupBy('chats.id')
->leftJoin( \DB::raw('chat_messages as cm'), \DB::raw('cm.chat_id'), '=', \DB::raw('chats.id') )
->leftJoin(\DB::raw('chat_messages as cmu'), \DB::raw('cmu.chat_id'), '=', \DB::raw('chats.id'))
->where( 'cmu.user_id', $user_id)
->get(); // `chat_messages` ORDER BY `chat_id` A
这是可行的,但就条件而言并不正确
>where( 'cmu.user_id', $user_id)
左联接被跳过,用户消息数为0的行被跳过,但我需要它们。
哪条路对?
谢谢!
1条答案
按热度按时间j2cgzkjk1#
你不需要加入一次以上的聊天信息。where子句在这种情况下是无用的。leftjoin处理联接表中的列。