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

5vf7fwbs  于 2023-03-13  发布在  其他
关注(0)|答案(4)|浏览(209)

我目前使用的是Spatie媒体库,并且创建了自己的自定义类,如下所示:

use Spatie\MediaLibrary\Models\Media 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();
}

我想把所有的代码都包含在关系的定义中,可以吗?

nsc4cvqm

nsc4cvqm1#

可以尝试使用-〉limit(1),例如:

public function avatar()
{
   return $this->morphMany(TrybzMedia::class, 'model')->where('collection_name', '=', 'avatar')->orderBy('put_column_name_here', 'DESC')->limit(1);
}

您可以获取最后一条记录。:)

dgenwo3n

dgenwo3n2#

以下作品:

public function cover()
{
    return $this->morphMany(TrybzMedia::class, 'model')
        ->where('collection_name', '=', 'cover')
        ->take(1)
        ->latest();
}
nhjlsmyf

nhjlsmyf3#

您可以尝试使用order by和first来获取最后一条或第一条记录。

public function avatar()
{
    return $this->morphMany(TrybzMedia::class, 'model')->where('collection_name', '=', 'avatar')->orderBy('put_column_name_here', 'DESC')->first();
}
ou6hu8tu

ou6hu8tu4#

我想这个能胜任吧?

public function cover()
{
    $this->morphOne(TrybzMedia::class, 'model')->latestOfMany();
}

参见文档:多个中的一个(多态)

相关问题