使用列列表中的“原始”列构建Eloquent查询

时间:2014-01-28 20:00:16

标签: php laravel-4 eloquent

我正在使用Eloquent构建一个查询,将一个列数组传递给get()方法以指定我想要返回的列名;但我还想添加一个计算列

YEAR(CURDATE())-YEAR(`dateOfBirth`) - (DAYOFYEAR(CURDATE()) < DAYOFYEAR(`dateOfBirth`)) as AGE

我知道如果我手动创建,我可以将WHEREHAVING子句的部分指定为raw,或将整个查询指定为raw;但我宁愿使用Eloquent的流畅界面来构建查询。

有没有办法可以将SELECT列表中的这一列定义为raw,以便Eloquent不会将其包含在反引号中?

修改

或者,有没有什么方法可以定义模型,可能是回调,创建一个age属性,并在填充模型时计算PHP中的值?

3 个答案:

答案 0 :(得分:2)

  

或者,有没有什么方法可以定义模型,可能是回调,创建一个age属性,并在填充模型时计算PHP中的值?

您希望模型中有an accessor

public function getAgeAttribute() {
    // do an age calculation on $this->dateOfBirth here
    return $age;
}

调用$model->age然后会吐出计算结果。

答案 1 :(得分:2)

在检查了Eloquent代码之后,并注意到(*除外)字段数组中传递给查询get()方法的所有条目都包含在反引号中,除非它们是{{1对象,我想出的解决方案是:

Query\Expression

发布在这里是为了让其他人努力寻找任何解释如何执行此操作的文档。

答案 2 :(得分:-2)

如何添加joins

$joins = [
];