laravel 5.6 Eloquent : eloquent 关系模型创建问题
laravel 5.6 Eloquent : eloquent relationship model creation issue
在我的控制器中,我通过关系创建了一个 Eloquent 模型实例传递。该模型加载在控制器的 __construct 上,这就是为什么存在 $this->store 而不是 $store 的原因。
public function index()
{
if (is_null($this->store->gallery)) {
$this->store->gallery()->create([
'title' => 'gallery_title,
'description' => 'gallery_description',
]);
}
$gallery = $this->store->gallery;
dd($gallery);
return view('modules.galleries.index', compact('gallery'));
}
简单地说,如果商店的画廊还不存在,让我们创建它。
第一次打印时,我的 dd() 始终为空,如果我重新加载页面,dd() 会正确显示我的图库模型。
事情对我来说很奇怪,似乎是第一次创建完成但还没有准备好......我可以变通,但为什么这段代码第一次不起作用?
非常感谢帮助。
关系代码:在图库中 ....
public function store()
{
return $this->belongsTo(Store::class);
}
店内...
public function gallery()
{
return $this->hasOne(Gallery::class);
}
这是 Eloquent 的延迟加载部分。基本上,当您使用 is_null($this->store->gallery)
对其进行测试时,它会将其设置为该值。
当您再次尝试恢复它时,它没有执行数据库查询,它只是加载了已经存在的值 (null
)。
创建后您需要强制重新加载关系:
$this->store->load('gallery');
或
unset($this->store->gallery);
或
$gallery = $this->store->gallery()->get();
当使用$this->store->gallery()->create()
方法时,原来的方法没有用新值进行水化,你可以简单地做一个
$gallery = $this->store->refresh()->gallery;
或
$gallery = $this->store->load('gallery')->gallery;
如果你想让你的代码更干净,你可以在你的商店模型中做到这一点:
public function addGallery($gallery){
$this->gallery()->create($gallery);
return $this->load('gallery')->gallery;
}
在你的控制器中:
$gallery = $this->store->addGallery([
'title' => 'gallery_title',
'description' => 'gallery_description',
]);
瞧!您的图库已准备就绪,可供使用:)
在我的控制器中,我通过关系创建了一个 Eloquent 模型实例传递。该模型加载在控制器的 __construct 上,这就是为什么存在 $this->store 而不是 $store 的原因。
public function index()
{
if (is_null($this->store->gallery)) {
$this->store->gallery()->create([
'title' => 'gallery_title,
'description' => 'gallery_description',
]);
}
$gallery = $this->store->gallery;
dd($gallery);
return view('modules.galleries.index', compact('gallery'));
}
简单地说,如果商店的画廊还不存在,让我们创建它。
第一次打印时,我的 dd() 始终为空,如果我重新加载页面,dd() 会正确显示我的图库模型。 事情对我来说很奇怪,似乎是第一次创建完成但还没有准备好......我可以变通,但为什么这段代码第一次不起作用? 非常感谢帮助。
关系代码:在图库中 ....
public function store()
{
return $this->belongsTo(Store::class);
}
店内...
public function gallery()
{
return $this->hasOne(Gallery::class);
}
这是 Eloquent 的延迟加载部分。基本上,当您使用 is_null($this->store->gallery)
对其进行测试时,它会将其设置为该值。
当您再次尝试恢复它时,它没有执行数据库查询,它只是加载了已经存在的值 (null
)。
创建后您需要强制重新加载关系:
$this->store->load('gallery');
或
unset($this->store->gallery);
或
$gallery = $this->store->gallery()->get();
当使用$this->store->gallery()->create()
方法时,原来的方法没有用新值进行水化,你可以简单地做一个
$gallery = $this->store->refresh()->gallery;
或
$gallery = $this->store->load('gallery')->gallery;
如果你想让你的代码更干净,你可以在你的商店模型中做到这一点:
public function addGallery($gallery){
$this->gallery()->create($gallery);
return $this->load('gallery')->gallery;
}
在你的控制器中:
$gallery = $this->store->addGallery([
'title' => 'gallery_title',
'description' => 'gallery_description',
]);
瞧!您的图库已准备就绪,可供使用:)