在我的控制器中,我通过一个关系创建了一个雄辩的模型实例。该模型加载在控制器的__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()总是为null,如果我重新加载页面,则dd()可以正确显示我的画廊模型。 事情对我来说很奇怪,似乎是第一次完成创建但还没有准备好……我可以解决,但是为什么这段代码第一次不起作用? 帮助非常感谢。
关系代码:在画廊上。
public function store()
{
return $this->belongsTo(Store::class);
}
在商店...
public function gallery()
{
return $this->hasOne(Gallery::class);
}
答案 0 :(得分:0)
这是Eloquent的延迟加载部分。基本上,当您使用is_null($this->store->gallery)
对其进行测试时,会将其设置为该值。
当您尝试再次恢复它时,它没有执行数据库查询,它只是加载了已经存在的值(null
)。
创建后,您需要强制重新加载关系:
$this->store->load('gallery');
或
unset($this->store->gallery);
或
$gallery = $this->store->gallery()->get();
答案 1 :(得分:0)
使用$this->store->gallery()->create()
方法时,原始方法不会与新值混合,您只需执行
$gallery = $this->store->refresh()->gallery;
OR
$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',
]);
,瞧!您已准备好使用图库:)