【发布时间】:2016-04-04 15:48:32
【问题描述】:
我正在处理从各种关系输出的数据表。
大部分数据来自具有Meter 模型的meters 表,但其中一些数据是通过关系从其他表中提取的。例如,我在按calibrations 表排序时遇到问题。
数据表有可以正常工作的可排序列。基于其他关系排序的列具有适当的连接,以便它们在没有任何查询错误的情况下进行排序。
除了last_calibration_date 之外,所有排序和连接都有效。
没有名为last_calibration_date 的列。事实上,每个meter 可以有多个校准。
在Meter 模型中,我通过calibration_date 列从calibrations 表中获取last_calibration_date:
public function getLastCalibrationDateAttribute()
{
if (isset($this->relations['calibrations']) && $this->relations['calibrations']->count())
return $this->relations['calibrations']->sortBy('calibration_date', SORT_REGULAR, true)->first()->calibration_date->format('Y-m-d');
}
当我不按 last_calibration_date 列排序时,这非常有效,但如果您尝试在没有连接的情况下按它排序,则会返回一个 sql 错误。
这是我的加入尝试:
if ($sort == 'last_calibration_date')
{
$query->join('calibrations', 'calibrations.meter_id', '=', 'meters.id');
$sort = 'calibrations.calibration_date';
}
虽然这不会返回错误,但它也不会返回实际的 last_calibration_date。
再多一点信息,calibrations 表就是这样设置的
calibrations
- id
- calibration_date
- next_calibration_date
- meter_id
因此,如前所述,任何仪表都可能进行多次校准。
关于如何在我的加入中复制我的Meter 方法的任何想法?或者也许是last_calibration_date 的另一种排序方式?
【问题讨论】:
-
升级到5.2,你已经过去了!
-
仍然会有同样的问题。
-
TBH 使用 DB::raw 对你来说不会那么头疼。
-
@guyfawkes 你可能是对的。
标签: laravel laravel-4 eloquent laravel-4.2