Laravel Как мне получить два внешних ключа из одной таблицы - PullRequest
0 голосов
/ 29 ноября 2018

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

Это моя попытка показать связьenter image description here

могу ли я сделать это с помощью миграции Laravel, которую я пробовал, но она не работает

Schema::create('events', function (Blueprint $table) {
        $table->increments('event_id');
        $table->integer('book_id')->unsigned();
        $table->integer('buyers_id')->unsigned();
        $table->integer('seller_id')->unsigned();
        $table->integer('status')->default(1);
        $table->timestamps();

        $table->foreign('book_id')->references('id')
        ->on('books')
        ->onDelete('cascade')
        ->onUpdate('cascade');
        $table->foreign('buyers_id')->references('id')
        ->on('users')
        ->onDelete('cascade')
        ->onUpdate('cascade');
        $table->foreign('seller_id')->references('id')
        ->on('users')
        ->onDelete('cascade')
        ->onUpdate('cascade');
    });

, поэтому таблица событий будет иметь 3 FK

  • один ФК из Книги
  • два ФК из Пользователей

     Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
    
        $table->string('name')->unsigned();
    
        $table->integer('user_type');
    
        $table->integer('password');
    
        $table->timestamps();
    
    
    });
    

это схема таблицы пользователей

1 Ответ

0 голосов
/ 29 ноября 2018

Если в вашем приложении ваш пользователь может выступать как продавцом, так и покупателем, решение role_id, предложенное в комментариях к вашему запросу, не будет работать для вас.

Следуя решению, которое вы уже работалине похоже, что с вашими миграциями что-то не так, когда вы запускаете php artisan migrate, это показывает какую-то ошибку?Если вы опубликуете его, я смогу обновить эту часть моего ответа.

В модели событий вы должны описать отношения следующим образом:

public function buyer()
{
    return $this->belongsTo(User::class, 'buyers_id');
}

public function seller()
{
    return $this->belongsTo(User::class, 'seller_id');
}

Поэтому, когда вы используете свою модель событий, вы можете сделать это следующим образом

$event = new Event;
$event->buyers_id = 1; // supposing there's a user with id 1
$event->seller_id = 2; // supposing there's a user with id 2
$event->save();

$event->buyer;
# => <User::class id=1>
$event->seller;
# => <User::class id=2>

[ОБНОВЛЕНИЕ] Добавить небольшой совет

Не имеет отношения к вашему вопросу, но я предлагаю вам переименовать свойbuyers_id столбец до buyer_id.Обычно в Laravel хранятся имена внешних ключей в единственном числе.


[ОБНОВЛЕНИЕ] Ссылка на документы

Для полной документации о взаимоотношениях'методы.

- https://laravel.com/docs/5.7/eloquent-relationships#one-to-many-inverse

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