小伙伴們好,本文是在我的前一篇隨筆的基礎上完成的,還沒有瀏覽的同學,請移尊駕哦 Eloquent ORM學習筆記。
前一篇文章用到了leftJoin方法,其實Eloquent對於模塊之間的關聯查詢有自己封裝,接下來我們就一起研究Eloquent的關聯是如何應用的。
1.創建Models
前一篇文章創建了UserModel,其實對於users_ext也可以創建一個Model: UserExtModel.php
<?php class UserExtModel extends \Eloquent { protected $table = 'users_ext'; protected $primaryKey = 'iAutoId'; protected $connection = 'user'; public function user() { return $this->belongsTo('UserModel','iUserID','iAutoId'); } }
2.建立關聯
修改UserModel.php,在文件中添加和users_ext的一對一關聯。
1 <?php 2 3 class UserModel extends \Eloquent { 4 5 protected $table = 'users'; 6 protected $primaryKey = 'iAutoId'; 7 protected $connection = 'user'; 8 9 public function userExt(){ 10 return $this->hasOne('UserExtModel','iUserID','iAutoId'); 11 } 12 }
3.關聯查詢
(1)一對一關聯:
上面兩個Models利用hasOne()和belongsTo()方法建立的關聯模型正是“一對一”模型,現在就可以做出簡單的查詢:
1 <?php 2 3 class HomeController extends BaseController { 4 5 public function getUsers(){ 6 $resData = UserModel::find(1)->userExt->toArray(); 7 var_dump($resData); 8 exit(); 9 } 10 }
以上查詢相當於sql語句:
1 SELECT 2 users_ext.* 3 FROM 4 users 5 LEFT JOIN users_ext ON users.iAutoId = users_ext.iUserID 6 WHERE 7 users_ext.iUserID = 1
(2)一對多關聯:
將UserModel模型中hasOne()改為hasMany(),這樣就建立了"一對多"的關聯模型,現在可以做以下簡單查詢:
1 <?php 2 3 class HomeController extends BaseController { 4 5 public function getUsers(){ 6 $resData = UserModel::find(1)->userExt()->where('sSex','=',1)->get()->toArray(); 7 var_dump($resData); 8 exit(); 9 } 10 }
以上查詢相當於sql語句:
1 SELECT 2 users_ext.* 3 FROM 4 users 5 LEFT JOIN users_ext ON users.iAutoId = users_ext.iUserID 6 WHERE 7 users.iAutoId = 1 8 AND users_ext.sSex = 1
(3)多對多關聯:
這個模型相對復雜,就以用戶和角色的關系來說明。需要另外創建roles和user_role兩張表,並初始化:
1 CREATE TABLE 2 IF NOT EXISTS roles ( 3 iAutoId INT (11) auto_increment, 4 sRoleName VARCHAR (20), 5 PRIMARY KEY (iAutoId) 6 ) ENGINE = INNODB DEFAULT CHARSET = utf8 auto_increment = 1; 7 8 INSERT INTO roles (sRoleName) 9 VALUES 10 ('admin'), 11 ('root'); 12 13 CREATE TABLE 14 IF NOT EXISTS user_role ( 15 iAutoId INT (11) auto_increment, 16 iUserID INT (11), 17 iRoleID INT (11), 18 PRIMARY KEY (iAutoId) 19 ) ENGINE = INNODB DEFAULT CHARSET = utf8 auto_increment = 1; 20 21 INSERT INTO user_role (iUserID, iRoleID) 22 VALUES 23 (1, 1), 24 (1, 2), 25 (2, 1), 26 (3, 2), 27 (3, 1);
緊接着就可以建立RoleModel了:
1 <?php 2 3 class RoleModel extends \Eloquent { 4 5 protected $table = 'roles'; 6 protected $primaryKey = 'iAutoId'; 7 protected $connection = 'user'; 8 }
然后在UserModel中創建“多對多”關聯關系:
1 <?php 2 3 class UserModel extends \Eloquent { 4 5 protected $table = 'users'; 6 protected $primaryKey = 'iAutoId'; 7 protected $connection = 'user'; 8 9 public function roles(){ 10 return $this->belongsToMany('RoleModel','user_role','iUserID','iRoleID'); 11 } 12 }
接下來就實現查詢了:
1 <?php 2 3 class HomeController extends BaseController { 4 5 public function getUsers(){ 6 7 $resData = UserModel::find(1)->roles; 8 var_dump($resData->toArray()); 9 exit(); 10 } 11 }
以上查詢結果為:

好吧,這里只是簡單學習了下,還有更復雜的需要小伙伴們自己查看API
