Laravel 5.6 Eloquent: красноречивая проблема создания модели отношений - PullRequest
0 голосов
/ 29 октября 2018

в моем контроллере я создаю пароль Eloquent Model Instance через отношение. Модель загружается в контроллер __construct, поэтому присутствует магазин $ this->, а не $ 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);
}

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

При использовании метода $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',
]);

и вуаля! Ваша галерея готова к использованию:

0 голосов
/ 29 октября 2018

Это ленивая загрузка Eloquent. в основном, когда вы проверяли его с помощью is_null($this->store->gallery), оно устанавливает это значение.

когда вы пытались восстановить его снова, он не выполнял запрос к БД, он просто загружал уже существующее значение (null).

после создания нужно принудительно перезагрузить отношение:

$this->store->load('gallery');

или

unset($this->store->gallery);

или

$gallery = $this->store->gallery()->get();
...