【发布时间】:2018-09-28 13:44:30
【问题描述】:
我有一个允许用户发布帖子的 laravel 应用程序。每个帖子都有一个价格(以整数形式存储),并且属于一所大学,而大学又属于一个有货币的国家。
每次我检索帖子时,我也想退回货币。我可以使用with('university.country'),但这会返回大学和国家/地区的所有详细信息。
我可以添加一个getCurrencyAttribute 并在那里定义逻辑,但这似乎不是变异器的用途,特别是因为如果我获得所有帖子,每个帖子将进一步运行两个自己的查询以获取货币。获得一篇帖子需要 3 次查询,当返回超过 10 个帖子时,这很快就会造成损失。
public function getCurrencyAttribute() {
return $this->university->country->currency;
}
public function getPriceAttribute($value) {
return "{$this->currency}{$value}";
}
^ 上面的示例:不需要appends,因为price 会被自动覆盖。这是在 DebugBar 上看到的问题(在 Post 模型上调用了两个新查询,虽然可以预期,但在检索大量帖子时会变得低效):
每次获取单个相关字段的最佳方式是什么?
【问题讨论】:
-
你能显示你的确切查询吗?
-
Eloquent 查询最初非常简单:
Post::get()。查看 GitHub 上的完整代码 :)!目前使用with方法获取币种,但似乎效率低下。 -
您可以使用完全访问器,它们用于从模型中获取自定义属性值。
标签: laravel api laravel-5 eloquent relationships