https://laracasts.com/series/laravel-5-fundamentals/episodes/14
http://laravel.com/docs/5.0/eloquent#relationships
Eloquent model之間可以把table的關聯關係寫到類別中。影片中舉個例子很好理解,一位user會寫很多篇article,這是one to many個關係,在user model定義這關係,可以把屬於特定user的所有文章撈出來。底下跟影片順序顛倒。
重新定義schema:實體table(users跟articles)尚未定義關聯(foreign key),利用migrations檔案定義並重產生table。
依據migration的foreign key定義的外部索引。MySQL的cascade作用。
定義models關聯:一對一、一對多、多對多,等等。
//User.php public function articles() { //method名稱取什麼都可以, 好辨別就可. return $this->hasMany('App\Article'); //hasMany帶的參數是關聯model的名稱 } //Article.php public function user() { return $this->belongsTo('App\User'); //article屬於一位user }
新增user跟article:先做資料到users跟articles table,接著再利用上述的關聯讀取資料。
2. 使用form新增一筆article。
Article.php的fillable變數增加user_id欄位讓store()可以儲存。
form.blade.php增加user_id hidden欄位,因為沒有登入機制,所以先用指定的(上頭新增的John Doe)。
測試model關聯:使用tinker測試User.php與Article.php所定義的關聯。
2. 首先,先實例化id=1的$user物件(first),接著$user->articles,它會返回user_id=1的所有articles的集合。這就是User.php定義public function articles() { …. }。
//User.php (User類別) public function articles() { return $this->hasMany('App\Article'); }
$user = App\User::first(),產生id=1(Key)的$user物件,至於$user->articles(),laravel怎知道撈什麼?hasMany(‘App\Article’),是要撈articles table,並且是撈foreign key等於1的。至於foreign key怎知道是user_id,laravel預設用model名稱_id,所以是user_id。
One thought on “Laravel 5 – Eloquent Relationships”