首页 > 解决方案 > 如何将复杂的 sql 查询转换为 laravel Eloquent

问题描述

这个工作最好。但我想转换为 laravel 雄辩。任何人都可以帮助我。我不知道如何在 laravel 中使用 join。

DB::select("SELECT u.id,c.conversation_key,u.user_name,u.email
                                 FROM conversation c, user_profile u
                                 WHERE CASE 
                                 WHEN c.user_one = '8790'
                                 THEN c.user_two = u.id
                                 WHEN c.user_two = '8790'
                                 THEN c.user_one= u.id
                                 END 
                                 AND (
                                 c.user_one ='8790'
                                 OR c.user_two ='8790'
                                 )
                                 Order by c.conversation_key DESC Limit 20");

标签: phplaravel

解决方案


转换后的 laravel Eloquen :

$userId = 8790;
$data['conversations'] = Conversation::selectRaw('user_profile.id, conversation_key, user_profile.first_name, user_profile.email')
            ->where(function ($q) use ($userId) {
                $q->where('user_one', $userId)
                    ->orWhere('user_two', $userId);
            })
            ->join('user_profile', function ($join) use ($userId) {
                $join->on('user_profile.id', '=', 'conversation.user_one')->where('conversation.user_one', '!=', $userId)
                    ->orOn('user_profile.id', '=', 'conversation.user_two')->where('conversation.user_two', '!=', $userId);
            })
            ->orderBy('conversation_key', 'DESC')
            ->take(20)
            ->get();

推荐阅读