【问题标题】:Laravel 5.4 - use a custom attribute model in a collectionLaravel 5.4 - 在集合中使用自定义属性模型
【发布时间】:2017-09-12 03:08:12
【问题描述】:
  • 我有型号Order
  • 订单有很多 Item.
  • Item 具有price 属性(来自数据库)。
  • Order 有一个 getAmountAttribute 方法,如下所示:

/**
 * @return double
 */

public function getAmountAttribute()
{
    return $this->items->sum('price');
}


/**
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function items()
{
    return $this->hasMany(Item::class);
}

所以我可以通过$order->amount 获取订单商品的总价格。


现在我有一个Order 的集合,我想获取总价从 10 开始的每个订单。由于我无法在 where 语句上使用自定义属性,我该如何实现?

【问题讨论】:

  • 如果你有一个现有的集合,只需运行一个循环。否则,您可能需要自定义 SQL 查询。
  • filter() 在一个集合上应该足够了。

标签: php laravel laravel-eloquent


【解决方案1】:

您只能获取所需的订单集合(总价从 10 开始的订单),而不是获取所有订单集合并获取所需的订单。

->get(function($order) {
        return $order->amount > 10;
    });

【讨论】:

  • 在执行get 方法之前有没有办法实现这个目标?我的意思是当你还在“建立”收藏时。
  • @Eliya 是的。我就是这么回答的。
【解决方案2】:

您可以通过->havingRaw('SUM(price) > 10')进行操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2016-09-10
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    相关资源
    最近更新 更多