【问题标题】:Laravel get model without appends attributesLaravel 获取没有附加属性的模型
【发布时间】:2017-02-20 02:27:40
【问题描述】:

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

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

还有神奇的方法:

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

所以,当我得到一个像Post::get() 这样雄辩的Post 模型,并用json 获得返回时,我的对象中总是有这个属性count

我如何指定我是否想要这个或另一个附加属性?

【问题讨论】:

  • Post::get() 不是一个有效的方法,你的意思是all
  • 是的,只是为了举例

标签: php laravel laravel-5 eloquent laravel-5.3


【解决方案1】:

我检查了 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']);
}

【讨论】:

  • 每次获取数据时都进行迭代不是一个好主意,最好保留无用的变量
  • 没错,只要计算值便宜。如果它涉及一些可能会产生性能开销的复杂逻辑,您可能只想在必要时附加它。无论如何,这是进行条件追加的唯一方法。
  • 嗯,是的,这对 Laravel 来说不是一个好点 ^^ 我正在开发一个 API,我不喜欢在我的不同 Web 服务中保留无用的数据
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-02-04
    • 2019-04-20
    • 2017-06-10
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多