我正在使用我从各种关系中输出的数据表。
大多数数据来自meters
表,其中Meter
模型,但其中一些数据是通过关系从其他表中提取的。例如,我遇到了calibrations
表排序的问题。
数据表具有可排序的列,可以正常工作。基于其他关系排序的列具有适当的连接,以便它们排序而不会出现任何查询错误。
除了last_calibration_date
之外,所有排序和连接都有效。
没有名为last_calibration_date
的列。实际上,每个meter
都可以进行多次校准。
在Meter
模型中,我通过last_calibration_date
列从calibrations
表中抓取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
排序的方式?
答案 0 :(得分:1)
好吧,好吧,我似乎已经解决了我的问题而没有完全明白为什么。
if ($sort == 'last_calibration_date')
{
$query->select('meters.*');
$query->join('calibrations as calibration', 'calibration.meter_id', '=', 'meters.id');
$sort = 'calibration.calibration_date';
}
添加$query->select('meters.*');
解决了这个问题。再次,不知道为什么。我的理解是选择特定表的列,而不是模型的关系。
无论如何,它现在正在运作。