Как сделать связь между таблицей пользователей и другими без первичного ключа на Laravel - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть таблица пользователей, которой назначен внешний ключ (clinic_uuid, а не первичный ключ) для таблицы клиник, как показано ниже.

$table->foreign('clinic_uuid',100)->references('clinic_uuid')->on('clinics');

После миграции я добавил отношение «много пользователей» к модели клиники.

public function users(){
 return $this->hasMany(User::class);
}

А также отношение «принадлежит клинике» к модели пользователя

public function clinic(){
   return $this->belongsTo(Clinic::class,'clinic_uuid');
}

После этого я добавляю несколько в таблицу клиник.

    clinic_uuid       name
----------------------------------
       a1111       dog clinic
       a2222       cat clinic

А также таблица пользователей.

  id    clinic_uuid       name
----------------------------------
  1       a1111           jame
  2       a1111           matt

Затем я пробую свой контроллер, как показано ниже, но получаю только ноль.

Auth::user()->clinic()->get();   --> get null
User::find(1)->clinic()->get();  --> get null

Ценится за все советы.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

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

public function clinic()
{
    return $this->belongsTo(Clinic::class, 'clinic_uuid', 'clinic_uuid');
}
public function users()
{
    return $this->hasMany(User::class, 'clinic_uuid', 'clinic_uuid');
}

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

0 голосов
/ 22 апреля 2019

Попробуйте с этим,

User::with('clinic')->findOrFail(auth()->id());

Попробуйте использовать готовую загрузку Laravel Eager Loading

Надеюсь, это поможет:)

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