Laravel 5.2 - 用于过滤多态关系的查询生成器语法?

时间:2017-08-16 15:27:48

标签: php laravel-5.2 laravel-query-builder

我有以下查询,我想过滤多态关系:

class File extends Model {

    protected $fillable = [
    'name',
    'path',
    'size',
    'mime_type',
    'file_type',
    'fileable_id',
    'fileable_type',

   ];

   public function fileable()
   {
       return $this->morphTo();
    }

}


class Company extends Model {

   public function files()
   {
       return $this->morphMany('App\File', 'fileable');
   }

 }

当我启用查询日志时,这就是我得到的:

{{1}}

你可以不包括我的where子句吗?

*更新*

这是我在公司和文件模型之间的多态关系:

{{1}}

我不确定为什么查询包含where子句。语法是否正确以过滤多态关系?公司可以有不同类型的文件,例如文件,徽标等,但我想选择徽标。

1 个答案:

答案 0 :(得分:0)

我决定重构如下:

在File类中添加了一个查询范围:

public function scopeCompanyLogo($query, $id)
{
    $query->where('file_type','=', 'Logo')
        ->where('fileable_type','=', 'App\Company')
        ->where('fileable_id','=', $id);
}

现在获取公司徽标如下:

 $companyLogo = File::CompanyLogo($user->company_id)->first();

*更新*

刚刚想出原始代码的错误

而不是这样做:

$companyLogo = $user->company->files->where('file_type', 'Logo')->first();

应该是:

 $companyLogo = $user->company->files()->where('file_type', 'Logo')->first();