Hello StackOverflow Community,
Я изо всех сил пытаюсь использовать настоящий raw sql в подвыборке из построителя запросов laravel.
Я не знаю ни одной функции, которая позволит мне передавать реальныеraw sql как подзапрос без вмешательства laravel в sql, который я пишу.
Поскольку я имею дело со структурой, у меня нет возможности использовать Laravel Query Builder.
Я хочу использовать 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 Query Builder или оконных функций с Laravel в целом?
С уважением, Берлин