【问题标题】:Laravel append attributes with related relation will cause reach maximum function nesting levelLaravel 附加具有相关关系的属性将导致达到最大函数嵌套级别
【发布时间】:2021-10-19 01:49:48
【问题描述】:
class Order extends Model {

    protected $appends = ['test'];

    public function orderItems()
    {
        return $this->hasMany('App\OrderItem');
    }

    public function getTestAttribute()
    {
        return $this->orderItems->first()->id;
    }
}

class OrderItem extends Model {

    protected $appends = ['test'];

    public function order()
    {
        return $this->belongsTo('App\Order');
    }

    public function getTestAttribute()
    {
        return $this->order->id;
    }
}

给定具有上述定义的模型,当我调用Order::find(1)->toArray() 时,我会收到以下错误。

Maximum function nesting level of '256' reached, aborting!

我应该如何避免这个问题?好像有递归调用

select * from orders where order.id in (?)
select * from order_items where order_items.order_id in (?)

谢谢!

【问题讨论】:

  • OrderItem 中返回$this->order_id 而不是$this->order->id
  • Un... @Aless55 您的答案是有效的,但仅适用于此示例代码。实际上我想要得到的是 order_item 表中没有的东西,比如 $this->order->total_charge。

标签: laravel laravel-4


【解决方案1】:

您不能在 OrderItem 中添加订单。现在你叫的是:
订单 -> 第一个 OrderItem -> 订单 -> 第一个 OrderItem ->
然后重复。

如果您在其他地方想要带有 Order 的 OrderItem。就做OrderItem::with('order')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2016-06-24
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多