如何将复杂的 sql 查询转换为 laravel Eloquent

Posted

技术标签:

【中文标题】如何将复杂的 sql 查询转换为 laravel Eloquent【英文标题】:How can i convert complicated sql query to laravel Eloquent 【发布时间】:2019-02-15 17:24:51 【问题描述】:

这项工作最好。但我想转换为 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");

【问题讨论】:

这里有完整的参考资料laravel.com/docs/5.7/queries。尝试一些东西,如果它不起作用,也许可以编辑你的问题,然后用 laravel 结果,我们可以再看一遍。 提示:***.com/questions/17092112/… 你能帮我解决吗@JigarShah。 @DhruvRaval 我不是 Jigar,但这不是代码编写服务。如果是这样,即使在短期内它也将变得毫无用处,因为 SO 的真正价值在于解决更多人可能遇到的问题,而不仅仅是您的问题。此外,恕我直言,必须努力,否则质量会降低,SO 或多或少会变得无用。 好的@reallynice。我会尝试解决我的问题。使用您或其他人的参考资料。 【参考方案1】:

转换后的 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();

【讨论】:

以上是关于如何将复杂的 sql 查询转换为 laravel Eloquent的主要内容,如果未能解决你的问题,请参考以下文章

将具有许多连接的复杂 SQL 查询转换为 Eloquent

如何将 sql 转换为查询生成器 laravel

如何将此 SQL 转换为 Laravel Query Builder 查询?

如何将此 sql 查询转换为 laravel 查询生成器

如何将左连接横向 SQL 查询转换为 Laravel Eloquent 查询?

如何将此查询从SQL(mysql)转换为Eloquent(Laravel)