Spatie laravel 查询构建器排序方法不起作用

问题描述 投票:0回答:1

我正在为我的项目对 laravel php 进行查询,我有这个范围:

public function scopeLocation(Builder $query, float $latitude, float $longitude, ?float $radius = 50): Builder
    {
        $haversineFormula = "(6371 * acos(cos(radians($latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($longitude)) + sin(radians($latitude)) * sin(radians(latitude))))";

        $query->select('products.*', \DB::raw($haversineFormula . ' AS distance'))
            ->whereRaw($haversineFormula . ' < ?', [$radius]);

        $query->withCount('tags');

        return $query;
    }

    public function scopeDates(Builder $query, ?string $filterStartDate = null, ?string $filterEndDate = null): Builder
    {
        if (!empty($filterStartDate) && !empty($filterEndDate)) {
            $query->join('availabilities', 'products.id', '=', 'availabilities.product_id')
                ->select('products.*')
                ->whereBetween('availabilities.date', [date($filterStartDate), date($filterEndDate)])
                ->groupBy('products.id');
        }

        return $query;
    }

这是我的类型:

class TagsSort implements Sort
{
    public function __invoke(Builder $query, bool $descending, string $property)
    {
        return $query->withCount('tags')
            ->orderBy('tags_count', $descending ? 'asc' : 'desc');
    }
}

这样,我得到了错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tags_count' in 'order clause'

如果我取消注释 //$query->withCount('tags');它工作正常。为什么会这样?

laravel
1个回答
0
投票

方法

withCount
将在结果模型上放置一个
{relation}_count
属性,请检查docs

在您的应用程序中,如果删除

withCount('tags')
,您就没有更多的列
tags_count

© www.soinside.com 2019 - 2024. All rights reserved.