Miles' Blog

天涯何處無幹話,何必要講實務話

Model

官方說明

Laravel 使用 Eloquent ORM 來操作 DB

  • resource 對應 DB table
  • model 對應 row
  • 所以 model 是單數,table 是複數
  • 而 Eloquent 取得的東西是 Collection

Relationships

官方說明

資料庫難搞的關聯,在 Eloquent ORM 裡設定起來還蠻簡單的,而且還提供幾種比較特別的關聯法

One To One

比方說,一個 User 對應一個 UserSetting,可以使用 hasOne 方法

class User extends Eloquent {

public function setting()
{
// 使用預設的外鍵 UserSetting.user_id
return $this->hasOne('UserSetting');
// 使用自定的外鍵 UserSetting.foreign_key
// return $this->hasOne('UserSetting', 'userId');
// 使用自定的外鍵 UserSetting.foreign_key 加上參考到 User.local_key
// return $this->hasOne('UserSetting', 'foreign_key', 'local_key');
}
}

使用 Dynamic Properties 取得關聯的物件:

$setting = User::find(1)->setting;

這行程式碼背後執行的 SQL 如下:

SELECT * FROM users WHERE id = 1
SELECT * FROM user_settings WHERE user_id = 1

相反的,要在 UserSetting 定義相對的關聯,可以使用 belongsTo 方法:

class UserSetting extends Eloquent {

public function user()
{
// 使用預設的外鍵 UserSetting.user_id
return $this->belongsTo('User');
// 使用自定的外鍵 UserSetting.local_key
// return $this->belongsTo('UserSetting', 'local_key');
// 使用自定的外鍵 UserSetting.local_key 加上參考到 User.parent_key
// return $this->belongsTo('UserSetting', 'local_key', 'parent_key');
}
}

One To Many

比方說,一個 User 對應很多 Post,可以使用 hasMany 方法:

class User extends Eloquent {

public function posts()
{
// 使用預設的外鍵
return $this->hasMany('Post');

// 使用自定的外鍵 Post.foreign_key
// return $this->hasMany('Post', 'foreign_key');
// 使用自定的外鍵 Post.foreign_key 加上參考到 User.local_key
// return $this->hasMany('Post', 'foreign_key', 'local_key');
}
}

使用 Dynamic Properties 取得 Post

$posts = User::find(1)->posts;

// 如果要加上條件,可以呼叫方法後再接 where 方法
$posts = User::find(1)->posts()->where('title', '=', 'foo')->first();

相反的,要在 Post 取得相對的關聯,使用 belongsTo 方法:

class Post extends Eloquent {

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