Laravel多态关系检索最后一条记录



我目前正在使用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();
}

最新更新