我正在为我的项目对 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');它工作正常。为什么会这样?
方法
withCount
将在结果模型上放置一个{relation}_count
属性,请检查docs。
在您的应用程序中,如果删除
withCount('tags')
,您就没有更多的列 tags_count
。