获取Laravel模型而不包含appends属性

7

我正在使用Laravel 5.3,我的模型Post中有一个附加属性:

/*
* toJson
*/
protected $appends = ['count'];

还有一个神奇的方法:

public function getCountAttribute()
    {
        return Offer::where('id', '=', $this->id)->count();
    }

因此,当我使用Eloquent获取 Post 模型时,例如使用 Post::get() 并且将其以 JSON 形式返回时,这个对象中总是有这个属性 count

我该如何指定我想要或不想要另一个附加属性?


Post::get() 不是一个有效的方法,您是否意味着 all - Styphon
是的,只是为了举例子。 - Clément Andraud
2个回答

6

我查看了Eloquent模型的序列化方式,不幸的是要追加的字段列表不会在给定模型的所有实例之间共享,我唯一看到的实现需求的方法是通过迭代结果集并显式启用所选属性的追加来完成:

$posts = Post::all();

foreach ($posts as $post) {
  // if you want to add new fields to the fields that are already appended
  $post->append('count');

  // OR if you want to overwrite the default list of appended fields
  $post->setAppends(['count']);
}

每次获取数据时迭代并不是一个很好的想法,最好保留无用的变量。 - Clément Andraud
没错,只要计算值的成本很低就可以了。如果涉及到一些复杂的逻辑,可能会有性能开销,你可能只想在必要时才进行附加。无论如何,这是条件附加的唯一方法。 - jedrzej.kurylo
嗯,是的,对于Laravel来说不是一个好的观点^^ 我正在开发一个API,我不喜欢在我的不同网络服务中保留无用的数据。 - Clément Andraud

1
您可以使用$post->getAttributes()来获取模型的属性,它会返回一个在任何附加操作之前的属性数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接