如何将复杂的 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 转换为 Laravel Query Builder 查询?