Nowość w Laravel

Jaka jest różnica między ForeignId () i unsignedBigInteger () podczas łączenia tabel

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

Próbowałem obu i wszystkie działały.

Zgodnie z dokumentacją mówi:

Metoda foreignId jest aliasem dla unsignedBigInteger

Ale co oznacza alias ? Czy to znaczy, że są takie same?


PS: Nie użyłem kodu w dokumentacji, a jedynie

$table->unsignedBigInteger('user_id');

I / lub

$table->foreignId('user_id');
7
h-kys 3 kwiecień 2020, 02:39

4 odpowiedzi

Najlepsza odpowiedź

Jeśli spojrzysz na Blueprint.php, zobaczysz obie metody:

 /**
 * 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;
}

Tak więc domyślnie używa kolumny typu „bigInteger” z „unsigned” ustawionym na true. W końcu są tacy sami.

Jedyną różnicą byłoby to, że przy „unsignedBigInteger” możesz kontrolować, czy $ autoIncrement ma wartość true czy false, a nie za pomocą ForeignId

9
Octet 2 kwiecień 2020, 23:44

Aż do Laravel 6 musieliśmy zdefiniować ograniczenie klucza obcego, takie jak

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

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

I to jest składnia Laravel 7

Schema::table('posts', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained();
});
5
DOBss 2 kwiecień 2020, 23:47

Tak, alias oznacza to samo.

0
Ezrab_ 2 kwiecień 2020, 23:41

Znaczenie aliasu: „używane do wskazania, że nazwana rzecz jest również znana lub bardziej znana pod inną określoną nazwą”.

Więc to jest w zasadzie to samo!

-1
Brilantin 2 kwiecień 2020, 23:45