Попытка преобразовать запрос в красноречивый - PullRequest
2 голосов
/ 22 апреля 2019

У меня есть следующий SQL:

SELECT arv.* 
FROM   article_reference_versions arv 
       INNER JOIN (SELECT `order`, 
                          Max(`revision`) AS max_revision 
                   FROM   article_reference_versions 
                   WHERE  `file` = '12338-230180-1-CE.doc' 
                   GROUP  BY `file`, 
                             `order`) AS b 
               ON arv.order = b.order 
                  AND arv.revision = b.max_revision 
WHERE  arv.file = '12338-230180-1-CE.doc' 

Мне нужно преобразовать это в Eloquent, чтобы я мог правильно обращаться к данным в виде объекта. Я пытался сделать это так,

$s = Models\EloArticleReferenceVersion::select(
    'SELECT arv.*
    FROM article_reference_versions arv
        INNER JOIN (
            SELECT `order`, max(`revision`) as max_revision
            FROM article_reference_versions
            WHERE file = ? group by `file`, `order`) AS b
        ON 
            arv.order = b.order AND arv.revision = b.max_revision 
            WHERE arv.file = ?',
        [ 
            '12338-230180-1-CE.doc', 
            '12338-230180-1-CE.doc' 
        ])->get();
dd($s);

Но я сталкиваюсь с множеством проблем, один за другим. Я подумал, что было бы легче просто преобразовать это в красноречивый запрос, ища некоторую помощь в этом.

1 Ответ

0 голосов
/ 22 апреля 2019

DB Query to Query с использованием Eloquent.

$query = EloArticleReferenceVersion::query()
    ->join(DB::raw('( SELECT `order`,Max(`revision`) AS max_revision FROM article_reference_versions WHERE  `file` = '12338-230180-1-CE.doc' GROUP  BY `file`, `order`) as sub_table'), function($join) {
    $join->on('sub_table.order', '=', 'article_reference_versions.order');
    $join->on('sub_table.max_revision ', '=', 'article_reference_versions.revision');
})
->where('article_reference_versions.file', '=', '12338-230180-1-CE.doc' )
->get();

Не проверено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...