我有以下查询,我想过滤多态关系:
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子句。语法是否正确以过滤多态关系?公司可以有不同类型的文件,例如文件,徽标等,但我想选择徽标。
答案 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();