laravel - разница между foreignId () и unsignedBigInteger () - PullRequest
1 голос
/ 03 апреля 2020

Новое для Laravel

В чем разница между foreignId () и unsignedBigInteger () при связывании таблиц

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

Я пробовал оба, и все они работали.

Согласно документации говорится:

Метод foreignId является псевдонимом для unsignedBigInteger

, но что делает псевдоним значит? Означает ли это, что они одинаковы?


PS: я не использовал код в документации, а только

$table->unsignedBigInteger('user_id');

и / или

$table->foreignId('user_id');

Ответы [ 4 ]

2 голосов
/ 03 апреля 2020

Если вы посмотрите на Blueprint. php вы увидите оба метода:

 /**
 * Create a new unsigned big integer (8-byte) column on the table.
 *
 * @param  string  $column
 * @param  bool  $autoIncrement
 * @return \Illuminate\Database\Schema\ColumnDefinition
 */
public function unsignedBigInteger($column, $autoIncrement = false)
{
    return $this->bigInteger($column, $autoIncrement, true);
}

/**
 * Create a new unsigned big integer (8-byte) column on the table.
 *
 * @param  string  $column
 * @return \Illuminate\Database\Schema\ForeignIdColumnDefinition
 */
public function foreignId($column)
{
    $this->columns[] = $column = new ForeignIdColumnDefinition($this, [
        'type' => 'bigInteger',
        'name' => $column,
        'autoIncrement' => false,
        'unsigned' => true,
    ]);

    return $column;
}

Итак, по умолчанию используется тип столбца "bigInteger", а для "unsigned" установлено значение true. В конце концов, они одинаковы.

Единственное отличие состоит в том, что с "unsignedBigInteger" вы можете контролировать, если для $ autoIncrement установлено значение true или false, а не для foreignId

1 голос
/ 03 апреля 2020

До Laravel 6 нам нужно было определить ограничение внешнего ключа, например

Schema::table('posts', function (Blueprint $table) {
    $table->unsignedBigInteger('user_id');

    $table->foreign('user_id')->references('id')->on('users');
});

, и это синтаксис Laravel 7

Schema::table('posts', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained();
});
0 голосов
/ 03 апреля 2020

Псевдоним, означающий: «используется для обозначения того, что именованная вещь также известна или более знакома под другим указанным именем».

Так что это в основном то же самое!

0 голосов
/ 03 апреля 2020

Да, псевдоним означает, что это то же самое.

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