【发布时间】:2016-05-01 21:57:42
【问题描述】:
更新(解决方案)
- 如果您需要来自
$user->images内的$image之一的->user关系,那么$user变量已经可用,因为您从中加载了->images! - 不要使用
protected $withEloquent 属性。这是一种反模式。 - 而是显式地从需要的位置/时间按需加载关系(注意:它不应该阻止您保持干燥!)
- 如果您真的需要/想要,请参阅@nicksonyap 的回答。它可以解决问题(我相信 - 未经测试)。
原创
我遇到了一个我认为很简单的问题:
- 我有一个
User对象,有很多Images -
Image属于User...(反比关系)
我的问题是我想同时加载User 模型上的images() 和Image 模型上的user()。为此,我只需按照文档中的说明设置 $with 属性。
我的User 模特:
class User extends EloquentModel {
protected $with = ['images'];
public function images()
{
return $this->hasMany(Image::class);
}
}
我的Image 模特:
class Image extends EloquentModel {
protected $with = ['user'];
public function user()
{
return $this->belongsTo(User::class);
}
}
但是在表演时:
$user = User::find(203);
这会导致无限循环(php 分段错误)。一定有某种我无法找到的循环引用:
[1] 85728 segmentation fault
编辑 2016/02
这是我发现的最简单的“解决方法”:
// User.php
public function setRelation($relation, $value)
{
if ($relation === 'images') {
foreach ($value as $image) {
$image->setUser($this);
}
}
return parent::setRelation($relation, $value);
}
【问题讨论】:
标签: laravel-5 eloquent eager-loading