$ post-> image()后立即无法访问$ post->图片 - >保存($ image)

时间:2015-12-09 01:11:46

标签: laravel eloquent laravel-5.1

    $post = $request->user()->posts()->create($request->all());

    $imageData = json_decode($request['imageData']) ?: null;

    $image = $this->imageHandler->make($request['image'], $imageData);;
    $post->image()->save($image);

    Log::debug($post->image->thumbnail);

当我这样做时,$post->image->thumbnail命令(以及日志本身)中的Log为空。我不明白为什么会发生这种情况 - 如果我提交帖子后续显示的视图并使用$post->image->thumbnail就好了,如果我进入artisan tinker我可以$post->image精细。由于某种原因,在制作邮政后的控制器中,它说不存在。此外,当它调用Algolia助手来保存/索引帖子时,它也不包括image

编辑:我在修补程序中尝试过此操作并遇到问题:

$post = factory(App\User::class)->create()->posts()->save(factory(App\Post::class)->make());返回新用户和帖子

$image = factory(App\Image::class)->create();返回新图片

$post->image()->save($image);返回false

$ image现在是:

App\Image {#761
     filename: "placeholder2.png",
     updated_at: "2015-12-09 01:31:31",
     created_at: "2015-12-09 01:31:22",
     id: 91,
     post_id: 104,
     post: null,
   }

$post->image为空。 $image->post为空。但$ image正确地拥有post_id。

如果我关闭修补程序并重新打开并$image = App\Image::find(91),现在$image->post会正确返回帖子。我不明白这里发生了什么。

2 个答案:

答案 0 :(得分:2)

这行代码:

mydomain.com/experiments

就我所见,无论结果如何,都将$ imageData设置为“null”。如果这是完整代码,那么您的问题很可能源于$ imageData始终为null。请尝试改为:

$imageData = json_decode($request['imageData']) ?: null;

答案 1 :(得分:0)

问题是在将图像保存到帖子后,仍然没有加载关系。但是当它再次被查询时,这种关系将在下次加载。

因此,将$ image保存到$ post后,我必须添加所有内容$post->load('image');然后才能访问$post->image