- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要抓取关系“经销商”的距离 < 200 的车辆
Vehicle::join('dealers', 'vehicles.dealer_id', '=', 'dealers.id')
->select(DB::raw("dealers.id, ( cos( radians(latitude) ) * cos( radians( longitude ) ) ) AS distance"))
->havingRaw('distance < 200');
我正在尝试在关系 (belongsTo) 经销商的别名“距离”上使用 havingRaw。但因错误而失败:
Column not found: 1054 Unknown column 'distance' in 'having clause'
更新
当我像这样将分页功能添加到上述查询时,问题实际上发生了。
$vehicle = Vehicle::join('dealers', 'vehicles.dealer_id', '=', 'dealers.id')
->select(DB::raw("dealers.id, ( cos( radians(latitude) ) * cos( radians( longitude ) ) ) AS distance"))
->havingRaw('distance < 200');
$result = $vehicle->paginate(15);
最佳答案
如果您在查询中使用 paginate()
,laravel 将尝试执行以下 SQL 代码来计算可能匹配的总数:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
如您所见,此查询中没有这样的列或别名 distance
。
我原来的答案中的选项 2 也可以解决该问题。
这似乎是一个 MySQL 严格模式问题。如果你使用 laravel 5.3,默认情况下会启用严格模式。您有两个选择:
选项 1:在 config/database.php
中禁用 MySQL 的严格模式
...
'mysql' => [
...
'strict' => false,
...
],
...
选项 2:使用 WHERE 条件
Vehicle::join('dealers', 'vehicles.dealer_id', '=', 'dealers.id')
->select(DB::raw("dealers.id, ( cos( radians(latitude) ) * cos( radians( longitude ) ) ) AS distance"))
->whereRaw('cos( radians(latitude) ) * cos( radians( longitude ) ) < 200');
文档:
A MySQL extension to standard SQL permits references in the HAVINGclause to aliased expressions in the select list. EnablingONLY_FULL_GROUP_BY disables this extension, thus requiring the HAVINGclause to be written using unaliased expressions.
关于mysql - 如何在 laravel 5 中对关系列使用 'having' 和分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40194120/
我是一名优秀的程序员,十分优秀!