小伙伴们好,本文是在我的前一篇随笔的基础上完成的,还没有浏览的同学,请移尊驾哦 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

  

Eloquent ORM 之关联查询的更多相关文章

  1. laravel Eloquent ORM联合查询出现Class not found,就算在Moel中存在这个类

    今天发现一个坑,在处理Eloquent ORM的联合查询时,一直报错Class 'AdminGroup' not found ,可是我的项目中明明存在这个类,如下 这是我的模型类: 它们的控制器方法: ...

  2. beego中orm关联查询使用解析

    这两天在学习beego框架,之前学习的时候遗漏了很多东西,比如orm.缓存.应用监控.模板处理等,这里将通过实例记录下如何使用beego自带的orm进行关联查询操作. 首先说明下,beego的orm有 ...

  3. DB门面,查询构建器,Eloquent ORM三者的CURD

    一.DB门面 1.insert DB::insert('insert into table(`name`) value(?)', ['test']); 2.update DB::update('upd ...

  4. Python--day64--找到作者关联的所有书籍对象、ORM多对多关联查询的原理

    找到当前作者关联的所有书籍对象: ORM多对多关联查询的原理: 编辑作者:

  5. Laravel Eloquent ORM

    Eloquent ORM 简介 基本用法 集体赋值 插入.更新.删除 软删除 时间戳 查询范围 关系 查询关系 预先加载 插入相关模型 触发父模型时间戳 与数据透视表工作 集合 访问器和调整器 日期调 ...

  6. Eloquent ORM 学习笔记

    最近在学习Laravel,觉得ORM功能很强大,我这里只是简单探索了一点,如果有更好的笔记,还请分享. 因为重点在于Eloquent ORM,所以路由设置,控制器就不详细描述了,这里直接进入Model ...

  7. orm获取关联表里的属性值

    ORM——关系对象模型 laravel中的Eloquent ORM用于和数据表互动,其中每个数据库表会和一个对应的「模型」互动,想要了解请查看官方文档或自行百度.获取关联表里的属性值代码如下: /** ...

  8. 基于EF的数据外键关联查询

    现在很多ORM不自带外键关联的实体查询,比如我查询用户,用时将关联的角色信息查询出来,那么就要进行2次查询,很麻烦.而我现在要做的就是基于EF的外键关联查询.很方便的. 首先,创建基础查询的BaseS ...

  9. [转]Laravel 4之Eloquent ORM

    Laravel 4之Eloquent ORM http://dingjiannan.com/2013/laravel-eloquent/ 定义Eloquent模型 模型通常放在app/models目录 ...

随机推荐

  1. Tomcat学习笔记 - 错误日志 - Tomcat部署项目或修改xml配置出现无法保存的情况(拒绝访问)

    原因分析:(windows下) 可能有人会发现在编辑好 tomcat-users.xml 文件后无法保存,原因是使用的用户没有权限修改文件,可能是把 Tomcat 发行包放到了一个需要管理员权限才能修 ...

  2. python-整理--连接MSSQL

    环境 : python3.4 / win10 / vs2013 / sqlexpress2014 需要的工具和包 1.freetds包 下载地址 https://github.com/ramiro/f ...

  3. ReferenceError: $ is not defined

    蛋疼的问题,原因是jquery导入顺序不对,任何页面都必须把jquery的导入放在首位,js文件放在其次.

  4. project euler 16:Power digit sum

    >>> sum([int(i) for i in str(2**1000)]) 1366 >>>

  5. js阻止元素的默认事件与冒泡事件

    嵌套的div元素,如果父级和子元素都绑定了一些事件,那么在点击最内层子元素时可能会触发父级元素的事件,从而带来一定的影响. 1. event.preventDefault();  -- 阻止元素的默认 ...

  6. 分析java 嵌套类与内部类

    一.什么是嵌套类及内部类?     可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类 ...

  7. windows环境下搭建Cocos2d-X开发环境

    最近终于有时间可心搞搞自己的东西了,呵呵,那就开始做个手机小游戏给孩子玩吧. 首先必须选定开发的框架,移动终端开源的游戏框架貌似不多,找来找去也就这个了,名字简单Cocos2d-X,是Cocos2d国 ...

  8. Linux学习,在线版

    考虑加入Linux教派,最初被Linux吸引是看了<Unix编程艺术>,虽然里面的个别非常教条,极端.但是里面大部分的设计思想我还是认同的. 下面是我整理的一些Linux资料,其实我打算折 ...

  9. 解决cognos以远程db2数据库为数据源的连接失败问题

    问题现象为使用远程的db2来创建数据源时,测试连接时不通,好多人都说是驱动问题,将db2cc.jar拷贝到某lib目录下,实验不通: 在看到某哥们的博客时最后提了一句,说需要将数据库catalog到本 ...

  10. 对Linux 新手非常有用的20 个命令

    你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现在我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳 ...