Как определить и использовать внешний ключ в качестве первичного ключа в Laravel? - PullRequest
0 голосов
/ 07 августа 2020

У меня есть таблица Users, в которой можно хранить 8 разных типов пользователей. В зависимости от типа пользователя у меня есть несколько других таблиц с определенным набором данных c для него. Итак, я хотел бы использовать идентификатор из таблицы Users как внешний ключ и как первичный ключ одновременно для этих таблиц. Но я новичок в Laravel, и я не знаю, как это сделать, чтобы соответствовать соглашениям, или, если это невозможно, как это сделать при определении моих моделей и взаимно однозначных отношений. Кто-нибудь может мне помочь? Спасибо!

РЕДАКТИРОВАТЬ: Извините, я думаю, что мое объяснение недостаточно ясно. Скажем, у меня есть 4 таблицы: пользователи, user_types, customer_organzations, partners и customers. Я хотел бы использовать идентификатор, то есть PK пользователей, в качестве внешнего ключа и первичного ключа для таблиц customer_organizations, partners и customers, которые имеют разную информацию, поскольку они являются разными типами пользователей в моем приложении, но все они входят в систему с таблицей пользователей. Меня не волнует таблица user_types. Думаю, я знаю, как с этим бороться.

1 Ответ

1 голос
/ 07 августа 2020

Вы не дали нам многого с точки зрения структуры вашей таблицы, поэтому, если у вас есть простая связь one-to-one между таблицей users и таблицей user_types, следующее может создать требуемую связь.

В вашей user_types миграции таблицы

$table->foreignId('user_id')->constrained();

Вышеупомянутое добавит ваш внешний ключ в таблицу и создаст связь обратно с таблицей users (это делается «волшебным образом» с использованием соглашений поэтому имя важно).

Затем в ваших eloquent моделях добавьте отношения между моделями:

Пользователь. php

public function type()
{
    return $this->hasOne(UserType::class);
}

Тип пользователя. php

public function user()
{
    return $this->belongsTo(User::class);
}
...