Laravel查询生成器子选择真正的原始SQL

时间:2018-11-30 12:10:18

标签: php mysql laravel laravel-query-builder

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的窗口函数?

来自柏林的问候

0 个答案:

没有答案