Hello StackOverflow社区,
我正在努力在laravel查询生成器的子选择中使用真实的原始sql。
我不知道任何允许我将真实的原始sql作为子查询传递而无需laravel干预我编写的sql的函数。
在处理框架时,我无法使用Laravel查询生成器。
我想在子查询中使用Mysql窗口函数(http://www.mysqltutorial.org/mysql-window-functions/)。
如果我使用Querybuilder函数->raw()
,它将仅输出select *
作为查询。如果我使用查询构建器函数->selectRaw
,它将在我的自定义子查询前面添加一个选择的内部。
两者都不是我所需要的,我需要REAL RAW SQL作为子查询。
这是现在的样子:
public static function hasConsentsQuery($query, $consentIds) {
$joinId = 'consent_user'.'_'.StringHelper::getRandomChars();
$query->join("consent_user as $joinId", "$joinId.user_id", '=', 'users.id');
$query->whereIn("$joinId.consent_id", $consentIds);
$query->where("$joinId.is_accepted", 1);
$query->whereIn("$joinId.id", function($query) {
$query->selectRaw("WITH ranked_messages AS (SELECT m.*, ROW_NUMBER() OVER (PARTITION BY user_id,consent_id ORDER BY created_at DESC) AS rn FROM consent_user AS m ) SELECT * FROM ranked_messages WHERE rn = 1");
});
$query->havingRaw("COUNT(DISTINCT $joinId.consent_id) = " . count($consentIds));
}
通常如何将RAW SQL用作Laravel查询生成器的子查询或Laravel的窗口函数?
来自柏林的问候