Laravel 附加具有相关关系的属性将导致达到最大函数嵌套级别
Posted
技术标签:
【中文标题】Laravel 附加具有相关关系的属性将导致达到最大函数嵌套级别【英文标题】:Laravel append attributes with related relation will cause reach maximum function nesting level 【发布时间】: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。
【参考方案1】:
您不能在 OrderItem 中添加订单。现在你叫的是: 订单 -> 第一个 OrderItem -> 订单 -> 第一个 OrderItem -> 然后重复。
如果您在其他地方想要带有 Order 的 OrderItem。就做OrderItem::with('order')
【讨论】:
以上是关于Laravel 附加具有相关关系的属性将导致达到最大函数嵌套级别的主要内容,如果未能解决你的问题,请参考以下文章
Fluent NHibernate:如何在关系表上映射具有附加属性的多对多关系?