Задать вопрос
@jazzus

Почему возвращает false?

Сразу после создания hasOne записи, мне нужно проверить есть ли она. Запись создается в бд, но dd($user->hasPassport()); возвращает false.
Код
$passport = $user->passport()->create([
         'name' => $filename,
         'slug' => $user->id.time()
]);

// dd($user->passport);
dd($user->hasPassport());

hasPassport в модели User
public function hasPassport() {
if ($this->passport) return true;
return false;
}

dd($user->passport); показывает null, хотя в бд запись есть. Еще раз обновляю страницу и проверка показывает true и объект. Т.е. сразу после create показывает false, а при повторном обновлении true. Ощущение будто не успевает создать запись в бд и поэтому проверка сразу после create возвращает false. Т.к. во всех других методах-проверках тру. В чем может быть причина такого поведения?
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
crashxd
@crashxd
Backend разработчик
Переменная $user хранит старое состояние объекта, каким оно было до создания passport.
Если заново получить пользователя из бд, то hasPassport таки покажет true.

Вариант с return $this->passport()->exists(); не пробовал. Возможно, что в этом случае будет идти новый запрос к бд, поэтому будет срабатывать без необходимости заново получать объект User.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы