在null上调用成员函数media()
我有几个相关的模型。我有一个“事件”模型。 (通过1到1)附加的是Gallery模型。 (通过一对多)附加的是“媒体”模型。在活动的“创建者”观察者中,我尝试附加其画廊。我可以毫无问题地创建图库,但是当我尝试将媒体连接到它时,会出现上述错误。
if ($model->gallery === null) {
$this->createGallery($model);
}
// product images or banner images
$file = Storage::put("public/event_images/", $image);
$file = str_replace("public/event_images/", "", $file);
$file = "/" . $file;
$model->gallery->media()->create([
"path" => $file,
"type" => "image"
]);
// The createGallery() function
private function createGallery($model)
{
$model->gallery()->create();
}
因此,我知道要解决此问题,我必须“等待” ,直到创建图库为止,然后再尝试访问其关系。但是我不知道该怎么做。这段代码在第二次运行时有效,表明确实创建了图库-在代码到达media()之前还不够快。
答案 0 :(得分:2)
PHP是一种同步编程语言,因此不必等待完成。
问题在于您已经加载了该关系,并且直到再次加载该关系后,该关系才会重新验证。可以使用load()
function完成。
更改代码以创建画廊:
if ($model->gallery === null) {
// Create the related model
$this->createGallery($model);
// Load the relation again
$model->load('gallery');
}
答案 1 :(得分:2)
我认为您可能需要在尝试访问模型关系之前刷新模型。在尝试将图像附加到图库之前,请尝试$model->refresh()
。像
if ($model->gallery === null) {
$this->createGallery($model);
$model->refresh();
}
否则该模型将不会意识到新创建的图库。