将计算字段添加到Laravel模型查询

时间:2016-06-30 03:41:40

标签: php laravel eloquent

我有一个控制器,它有一个查询,例如:

$post = Post::find($id);
$comments = $post->comments;

如果帖子有很多评论且评论属于一个帖子。评论模型有id,comment,tag字段。

我想要做的是,对于任何这样的查询,模型返回字段id,comment,tag和tag_translated,其中后者只是使用Lang外观的标签转换。

我可以通过在控制器上使用for来解决这个问题,该控制器遍历$ comments并添加字段,但是我必须为需要tag_translared字段的每个控制器执行此操作。有没有办法让模型包含这样一个字段?

3 个答案:

答案 0 :(得分:13)

Comment模型中添加此内容:

protected $appends = ['tag_translated'];

public function getTagTranslatedAttribute()
{
    return 'the translated tag';
}

希望这有帮助。

答案 1 :(得分:7)

是的吗?只需将其添加到您的Comment型号

即可
public function getTagTranslatedAttribute()
{
    return Lang::methodYouWish($this->tag);
}

然后您可以从评论实例

访问此属性
$comment->tag_translated;

修改

您可以修改toArray方法,只需将其添加到Comment

即可
protected $appends = ['tag_translated'];

然后

$comment->toArray();

答案 2 :(得分:1)

我遇到了同样的问题,您只需要添加两件事:

第一个是附加字段:

protected $appends = ['field'];

第二个是“ getter”:

public function getFieldAttribute()

在方法名称的末尾,您需要添加“ Attribute”后缀,仅此而已。