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