【问题标题】:Trying to convert a query to eloquent试图将查询转换为 eloquent
【发布时间】:2019-04-22 17:25:47
【问题描述】:

我有以下 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);

但我遇到了一大堆问题,一个接一个。我认为将其转换为雄辩的查询会更容易,并寻求一些帮助。

【问题讨论】:

  • EloArticleReferenceVersion 与 article_reference_versions 的关系是什么样的?
  • EloArticleReferenceVersionarticle_reference_versions 表的模型。我正在尝试自己加入它

标签: mysql laravel eloquent


【解决方案1】:

使用 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();

未测试

【讨论】:

  • 这会返回错误Object of class Illuminate\Database\Eloquent\Builder could not be converted to string?
  • 现在试试。有时格式化的字符串查询不适用于 DB::raw。
  • 我收到了错误class DB not found,所以我用hereuser Illuminate\Support\Facades\DB; 修复了它,但现在我收到了错误A facade root has not been set.
  • 这是一个奇怪的错误。你使用的是 Laravel 还是 Lumen?
  • 我正在使用 laravel :( 只是说Class 'DB' not found
猜你喜欢
  • 1970-01-01
  • 2013-01-08
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 2020-10-03
相关资源
最近更新 更多