Laravel миграция внешнего ключа MySQL - PullRequest
0 голосов
/ 05 мая 2019

У меня есть две таблицы:

Пользователи (идентификатор, имя)

События (идентификатор, имя, дата, user_created_id, user_updated_id (и т. Д.))

Какможно связать два идентификатора таблицы «События» с идентификатором пользователя?

user_created_id -> users.id
user_updated_id -> users.id

ОБНОВЛЕНИЕ

$table->integer('user_created_id')->unsigned();
$table->integer('user_updated_id')->nullable();

$table->foreign('user_created_id')->references('id')->on('users');
$table->foreign('user_updated_id')->references('id')->on('users');

Ответы [ 2 ]

1 голос
/ 06 мая 2019

В модели Event вы можете определить два отношения:

public function user_created(){
    return $this->belongsTo('App\User', 'user_created_id');
}

public function user_updated(){
    return $this->belongsTo('App\User', 'user_updated_id');
}

В вашей модели User вы также можете определить обратные отношения:

public function created_events(){
    return $this->hasMany('App\Event', 'user_created_id');
}

public function updated_events(){
    return $this->hasMany('App\Event', 'user_updated_id');
}

Св эти службы связи вы можете позвонить $event->user_created, чтобы получить App\User, связанный с user_created_id (то же самое для версии updated).

С экземпляром App\User вы можете вызвать $user->created_events, чтобы получить коллекцию App\Event (опять же, то же самое с $user->updated_events).

1 голос
/ 06 мая 2019

Если ваш вопрос заключается в том, как сделать внешний ключ для этих двух столбцов, то здесь:

$table->unsignedInteger('user_created_id');
$table->unsignedInteger('user_updated_id');

$table->foreign('user_created_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('user_updated_id')->references('id')->on('users')->onDelete('cascade');

Если столбец id в таблице users равен bigIncrements, замените unsignedInteger на unsignedBigInteger

...