首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 4.2按雄辩的关系问题分类

Laravel 4.2按雄辩的关系问题分类
EN

Stack Overflow用户
提问于 2016-04-04 15:48:32
回答 1查看 342关注 0票数 1

我正在使用一个datatable,它是我从各种关系中输出的。

大多数数据来自具有meters模型的Meter表,但有些数据是通过关系从其他表中提取的。例如,我在按calibrations表进行排序时遇到了问题。

datatable具有工作正常的可排序列。基于其他关系进行排序的列具有适当的联接,因此它们进行排序时不会出现任何查询错误。

所有的排序和联接工作,除了一个,last_calibration_date

没有名为last_calibration_date的列。事实上,每个meter可能有多个校准。

Meter模型中,我以这种方式从calibrations表中通过calibration_date列获取calibration_date

代码语言:javascript
复制
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错误。

下面是我加入的尝试:

代码语言:javascript
复制
if ($sort == 'last_calibration_date')
{
    $query->join('calibrations', 'calibrations.meter_id', '=', 'meters.id');
    $sort = 'calibrations.calibration_date';
}

虽然这不会返回错误,但它也不会返回实际的last_calibration_date

只需提供更多的信息,calibrations表的设置如下所示

代码语言:javascript
复制
calibrations
- id
- calibration_date
- next_calibration_date
- meter_id

因此,如前所述,任何仪表都可以进行多次校准。

对于如何在我的join中复制我的Meter方法有什么想法吗?或者另一种按last_calibration_date进行排序的方法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-08 16:53:09

好吧,好吧,我好像解决了我的问题,却不太明白原因。

代码语言:javascript
复制
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.*');已经解决了这个问题。再说一遍,不知道为什么。我的理解是选择特定表的列,而不是模型的关系。

不管怎样,现在起作用了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36407251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档