【问题标题】:Convert Query Builder to Eloquent Builder将查询生成器转换为 Eloquent 生成器
【发布时间】:2020-07-09 01:10:29
【问题描述】:

我无法在 groupby 中提取结果,下面的查询生成器运行良好,但我希望它能够 Eloquent。 我只想显示关系中已经存在的文件夹?

如何将查询构建器转换为 Eloquent?

$folders = Folder::select('folders.id','folders.title')
    ->join('matters', 'matters.folder_id', '=', 'folders.id')
    ->join('tutorials', 'tutorials.matter_id', '=', 'matters.id')
    ->whereDate('tutorials.start', '=', date('Y-m-d'))
    ->where('tutorials.status','=','0')
    ->groupby('folders.id')
    ->get();

【问题讨论】:

  • 这是雄辩的建设者...
  • 我的意思是没有连接的 Eloquent,即:$ 文件夹 = 文件夹 :: with ('matters') ....
  • 那么你需要建立它们之间的关系
  • 模型中已经存在关系 class Tutorial Model{ public function matter() { return $this->belongsTo(Matter::class); } } 类物质模型{ 公共函数文件夹() { 返回 $this->belongsTo(Folder::class); } public function tutorials() { return $this->hasMany(Tutorial::class); } } 类文件夹模型{ 公共函数事项() { 返回 $this->hasMany(Matter::class); } }

标签: laravel eloquent query-builder laravel-query-builder


【解决方案1】:

好像Floder hasMany Matter, Matter hasMany Tutorial

您可以在Folder模型中创建hasManyThrough关系,并使用whereHas查找folders

$folders = Folder::whereHas('tutorials', function($query) {
                     $query->whereDate('tutorials.start', '=', date('Y-m-d'))
                           ->where('tutorials.status','=','0');
                 })->select('title', 'id')->get();

如果你没有hasManyThrough关系,你仍然可以像这样得到folders

$folders = Folder::whereHas('maters.tutorials', function($query) {
                     $query->whereDate('tutorials.start', '=', date('Y-m-d'))
                           ->where('tutorials.status','=','0');
                 })->select('title', 'id')->get();

【讨论】:

  • 我得到这个错误 Symfony\Component\Debug\Exception\FatalThrowableError 调用数组上的成员函数 getRelationExistenceQuery()
  • @visulo 对语法问题感到抱歉。我已经更新了。
  • 我能再问你一个问题吗?
  • @visulo 是什么?
  • 我无法解决这个请求? stackoverflow.com/questions/60873653/…
猜你喜欢
  • 2015-07-21
  • 2018-08-06
  • 1970-01-01
  • 2021-10-14
  • 2020-10-13
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
相关资源
最近更新 更多