我目前正在使用Spatie媒体库,我已经创建了自己的自定义类,如下所示:
use SpatieMediaLibraryModelsMedia as BaseMedia;
class TrybzMedia extends BaseMedia
{
protected $table = 'media';
protected $appends = ['url'];
public function getUrlAttribute()
{
return $this->getUrl();
}
}
我有一个User类,我在其中定义了多态关系:
public function avatar()
{
return $this->morphMany(TrybzMedia::class, 'model')->where('collection_name', '=', 'avatar');
}
可能上传了多张照片,所以我试图实现的是获得这段关系的最后一张记录。我尝试了以下操作,但没有成功:
public function avatar()
{
return $this->morphMany(TrybzMedia::class, 'model')->where('collection_name', '=', 'avatar')->last();
}
我希望在关系的定义中包含所有代码。这可能吗?
您可以尝试使用->限制(1(类似:
public function avatar()
{
return $this->morphMany(TrybzMedia::class, 'model')->where('collection_name', '=', 'avatar')->orderBy('put_column_name_here', 'DESC')->limit(1);
}
您可以获得最后一张唱片。:(
以下作品:
public function cover()
{
return $this->morphMany(TrybzMedia::class, 'model')
->where('collection_name', '=', 'cover')
->take(1)
->latest();
}
我想这可以完成任务吗?
public function cover()
{
$this->morphOne(TrybzMedia::class, 'model')->latestOfMany();
}
参见文档:一个多(多态(
您可以尝试使用order by和first来获取最后一条或第一条记录。
public function avatar()
{
return $this->morphMany(TrybzMedia::class, 'model')->where('collection_name', '=', 'avatar')->orderBy('put_column_name_here', 'DESC')->first();
}