2017-02-22 32 views
0

I'am new на Laravel, я использую версию laravel 5.4. У меня есть следующий сценарий: у меня есть одна таблица для пользователей, где я помещаю только имя пользователя и пароль, а также два других сотрудника и партнеров таблиц, где я храню все данные для пользователей, таких как имя, адрес, адрес электронной почты, телефон ....Как использовать полиморфные отношения в Laravel со всеми строками?

структура

Таблицы:

пользователи - идентификатор | имя пользователя | пароль | userable_id | userable_type
сотрудников - ID | имя | телефон | электронная почта | заработная плата | позиция | departamnet
партнеры - идентификатор | имя | НазваниеКомпании

In User model: 
class User extends Authenticatable 
{ 
     public function userable(){ 
     return $this->morphTo(); 
    } 
} 

Class Model: 
    class Employee extends Model 
    { 
     protected $fillable = []; 
     public function users() 
     { 
      return $this->morphOne('App\User', 'userable'); 
     } 
    } 
Partner Model: 
class Partner extends Model 
{ 
    protected $fillable = []; 
    public function users() 
    { 
     return $this->morphOne('App\User', 'userable'); 
    } 
} 

Теперь, если я выполняю это (приложение \ User :: first() -> userable) в tinker вернет данные из Employee/Partner только для первого пользователя. для всех() или получить() методы будут возвращать это:

App \ User :: все() -> userable Exception с сообщением «Property [userable] не существует на этом примере коллекции «. App \ User :: get() -> userable Исключение с сообщением 'Свойство [userable] не существует в этом экземпляре коллекции.'

Это любое изменение, чтобы сделать эту работу для всех пользователей списка? PS: в таблице users на userable_type у меня есть модель, а на userable_id у меня есть идентификатор строки, который соответствует модели, например Employee и 1. Спасибо заранее.

ответ

0

Я считаю, так как вы получаете коллекцию всех пользователей, проблемы в том, что вы должны нетерпеливую нагрузку отношения для того, чтобы получить то, что вы ищете

App\User::with('userable')->get();

Я не на моей рабочей станции, чтобы проверить этот atm, но это должно работать, если память мне подходит. Я обновлю это, когда смогу проверить его

+0

Спасибо! Я пробую это раньше только в коде, а не в Тинкере. После того, как я вижу ответ в возиться, я понимаю, что что-то не так в коде ... –