小伙伴们好,本文是在我的前一篇随笔的基础上完成的,还没有浏览的同学,请移尊驾哦 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的一对一关联。
<?php class UserModel extends \Eloquent { protected $table = 'users';
protected $primaryKey = 'iAutoId';
protected $connection = 'user'; public function userExt(){
return $this->hasOne('UserExtModel','iUserID','iAutoId');
}
}
3.关联查询
(1)一对一关联:
上面两个Models利用hasOne()和belongsTo()方法建立的关联模型正是“一对一”模型,现在就可以做出简单的查询:
<?php class HomeController extends BaseController { public function getUsers(){
$resData = UserModel::find(1)->userExt->toArray();
var_dump($resData);
exit();
}
}
以上查询相当于sql语句:
SELECT
users_ext.*
FROM
users
LEFT JOIN users_ext ON users.iAutoId = users_ext.iUserID
WHERE
users_ext.iUserID = 1
(2)一对多关联:
将UserModel模型中hasOne()改为hasMany(),这样就建立了"一对多"的关联模型,现在可以做以下简单查询:
<?php class HomeController extends BaseController { public function getUsers(){
$resData = UserModel::find(1)->userExt()->where('sSex','=',1)->get()->toArray();
var_dump($resData);
exit();
}
}
以上查询相当于sql语句:
SELECT
users_ext.*
FROM
users
LEFT JOIN users_ext ON users.iAutoId = users_ext.iUserID
WHERE
users.iAutoId = 1
AND users_ext.sSex = 1
(3)多对多关联:
这个模型相对复杂,就以用户和角色的关系来说明。需要另外创建roles和user_role两张表,并初始化:
CREATE TABLE
IF NOT EXISTS roles (
iAutoId INT (11) auto_increment,
sRoleName VARCHAR (20),
PRIMARY KEY (iAutoId)
) ENGINE = INNODB DEFAULT CHARSET = utf8 auto_increment = 1; INSERT INTO roles (sRoleName)
VALUES
('admin'),
('root'); CREATE TABLE
IF NOT EXISTS user_role (
iAutoId INT (11) auto_increment,
iUserID INT (11),
iRoleID INT (11),
PRIMARY KEY (iAutoId)
) ENGINE = INNODB DEFAULT CHARSET = utf8 auto_increment = 1; INSERT INTO user_role (iUserID, iRoleID)
VALUES
(1, 1),
(1, 2),
(2, 1),
(3, 2),
(3, 1);
紧接着就可以建立RoleModel了:
<?php class RoleModel extends \Eloquent { protected $table = 'roles';
protected $primaryKey = 'iAutoId';
protected $connection = 'user';
}
然后在UserModel中创建“多对多”关联关系:
<?php class UserModel extends \Eloquent { protected $table = 'users';
protected $primaryKey = 'iAutoId';
protected $connection = 'user'; public function roles(){
return $this->belongsToMany('RoleModel','user_role','iUserID','iRoleID');
}
}
接下来就实现查询了:
<?php class HomeController extends BaseController { public function getUsers(){ $resData = UserModel::find(1)->roles;
var_dump($resData->toArray());
exit();
}
}
以上查询结果为:
好吧,这里只是简单学习了下,还有更复杂的需要小伙伴们自己查看API