Laravel Eager Загрузка нулевая с полиморфными отношениями - PullRequest
0 голосов
/ 13 ноября 2018

В моей модели у меня есть:

//UserAddress.php

protected $with = ['address'];

public function address()
{
    return $this->morphOne('App\Address', 'addressable');
}

//User.php
public function userAddress()
{
    return $this->hasOne(UserAddress::class);
}

//Address.php
public function addressable() 
{
    return $this->morphTo();
}

Но когда я звоню dd(auth()->user()->userAddress)) Адрес адреса не загружается. Это все еще ноль.

#attributes: array:4 [
    "id" => "1"
    "user_id" => "1"
    "created_at" => "2018-11-13 10:11:54"
    "updated_at" => "2018-11-13 10:11:54"
  ]
  #original: array:4 [
    "id" => "1"
    "user_id" => "1"
    "created_at" => "2018-11-13 10:11:54"
    "updated_at" => "2018-11-13 10:11:54"
  ]
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: array:1 [
    "address" => null
  ]
  #touches: []
  +timestamps: true

Однако, с dd(auth()->user()->userAddress()->get())) отношения загружены.

В чем проблема?

Редактировать

Это супер странно. Если я напишу auth()->user()->userAddress->address, я получу ноль (так не должно быть). И когда я снимаю protected $with = ['address']; auth()->user()->userAddress->address, я получаю правильную модель.

1 Ответ

0 голосов
/ 25 мая 2019

У меня была такая же проблема с отношением один-к-одному, когда поле id было строкой.Все работало до тех пор, пока я не загрузил соединительную таблицу (в вашем случае user_address).

В моем случае я забыл определить public $incrementing = false; в соединительной таблице, и как только я добавил это, все заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...