在Laravel模型查询中添加一个计算字段


Add a calculated field to Laravel model query

我有一个控制器,它有这样一个查询:

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

一个帖子有很多评论,一个评论属于一个帖子。评论模型有一个id、评论和标签字段。

我想做的是,对于任何像这样的查询,模型返回字段id、comment、tag和tag_translating,后者只是使用Lang facade对标记进行翻译。

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

将此添加到您的Comment模型:

protected $appends = ['tag_translated'];
public function getTagTranslatedAttribute()
{
    return 'the translated tag';
}

有吗?只需将此添加到您的Comment模型

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

则可以从注释实例

访问此属性
$comment->tag_translated;

编辑

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

protected $appends = ['tag_translated'];

然后

$comment->toArray();

我也面临着同样的问题,你只需要添加两件事:

第一个是追加字段:

protected $appends = ['field'];

第二个是"getter":

public function getFieldAttribute()

你需要在方法名的后面加上"Attribute"后缀,就这样了