Laravel query orderBy has 'media' using Spatie\MediaLibrary

wrrgggsh  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(105)

我目前使用的Spatie\MediaLibrary为我的评论模型。
我得到了一个查询获得所有评论,但我试图显示评论,有图像首先使用orderBy
app\Models\Product.php不工作

public function reviews(): \Illuminate\Database\Eloquent\Relations\HasMany
{
    return $this->hasMany(Review::class)->orderBy('media');
}

SQLSTATE[42S22]:未找到列:1054“order子句”中的未知列“media”
使用has 'media'或doesnthave 'media'即可。但我想在1查询。

public function activeImageReviews(): \Illuminate\Database\Eloquent\Relations\HasMany
{
    return $this->hasMany(Review::class)->has('media');
oxcyiej7

oxcyiej71#

如果数据库中存在一个名为“media”的列,您可以尝试:

public function reviews(): \Illuminate\Database\Eloquent\Relations\HasMany
{
  return $this->hasMany(Review::class)->orderByRaw('CASE WHEN `media` IS NULL THEN 0 ELSE 1 END ASC');
}
dphi5xsq

dphi5xsq2#

Unknown column 'media'意味着该列未在表中创建,请确保正确创建了迁移。
在另一种情况下,如果您的media来自一个规范化的,那么您的方法应该是在您的Review模型和您的Media模型之间创建关系,然后使用with()建立关系

return $this->hasMany(Review::class)->with('media')->orderBy('media.column');

编辑:
由于它仅基于文件,因此建议在提取后按文档对集合进行排序:

// sortBy
$sorted = $collection->sortByDesc(function(Model $item) {
    $media = ...;
    return $item->has($media);
});

相关问题