Wiązanie ze sobą modeli

Aby powiązać ze sobą modele należy:

Zacznijmy od edycji Modelu Video.php Dopiszmy do niego publiczną funkcję user. Nazywanie w ten sposób metody pozwoli Laravel automatycznie powiązać się z modelem User.php i za jej pomocą zwrócimy filmy ,którego autorem jest właśnie ten użytkownik.

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

Następnie przejdźmy do Modelu User.php i w nim podobnie jak powyżej Ułatwijmy prace Laravel i dopisując metodę nazwijmy ją video(), w końcu chcemy powiązać się z modelem video.

public function videos(){
    return $this->hasMany('App\Video')
}

Metoda ta mówi dosłownie: Zwróć filmy tego użytkownika, a że ma ich wiele. stąd hasMany().

Następnie przejdźmy do migracji i tam musimy wprowadzić troszkę zmian.

Otwórzmy migrację: create_videos_table i dodajmy w niej kolumnę: user_id o typie integer z właściwością unsigned(); Taki zapis pozwoli Nam dodać właśnie w tej kolumnie id użytkownika, który dodał ten film, a własność unsigned() ograniczy wartości id tylko do dodatnich.

$table->integer('user_id')->unsigned();

Jednak to nie wszystko teraz należy poinformować Laravel o tym że dodaliśmy pole klucza obcego poleceniem:

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

A dosłownie można to przeczytać w ten sposób:
Pole klucza obcego user_id, odwołuje się do id w tabeli users

Całość kodu powinna wyglądać tak:

Schema::create('videos', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->integer('user_id')->unsigned();
    $table->string('title');
    $table->string('url');
    $table->text('description');
    $table->timestamps();

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

});

Gdy już wprowadzimy zmiany do tabeli należy je zapisać i odświeżyć migrację. Odświeżanie takiej migracji wiąże się z tym, że wszystkie dotychczasowe dane wprowadzone do WSZYSTKICH TABEL zostaną utracone!

chcąc odświeżyć migrację należy użyć polecenia:

php artisan migrate:refresh