小伙伴们好,本文是在我的前一篇随笔的基础上完成的,还没有浏览的同学,请移尊驾哦 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. poi操作excel设置数据有效性

    private void setDataValidationList(short firstRow,short endRow,short firstCol, short endCol,String d ...

  2. bootstrap data- jquery .data

    jquery官网对.data函数描述是:在匹配元素上存储任意相关数据 或 返回匹配的元素集合中的第一个元素的给定名称的数据存储的值. 存储键值(key/value): $("body&quo ...

  3. linux开启mysql远程登录

    Mysql默认root用户只能本地访问,不能远程连接管理mysql数据库,Linux如何开启mysql远程连接?设置步骤如下:1.GRANT命令创建远程连接mysql授权用户itloggermysql ...

  4. jsp执行数据库查询并分页

    需求: 有一批企业的基本信息需要展示出来,要求一级页以列表形式展示企业清单,点击公司名称后进入二级页面,二级页面展示企业简介和几张图片. 实现效果: 开发环境: Win7,Eclipse,Mysql ...

  5. Custom.pm

    1) 只有一种事情比你培训员工.培养员工然后他们离开要更糟糕,那就是你不培训他们.不培养他们,但他们仍然留下来. 2) PM的含义: Product Manager, Project Manager, ...

  6. USB系列之四:向U盘上写数据

    在<USB系列之三>中,我们实现了一系列的SCSI命令,在这个系列中,我们要实现向U盘上写扇区的命令,所以,本文相对比较容易,更多地是给出一个实现的源程序. 在<USB系列之三> ...

  7. spring springMVC mybatis 集成

    最近闲来无事,整理了一下spring springMVC mybatis 集成,关于这个话题在园子里已经有很多人写过了,我主要是想提供一个完整的demo,涵盖crud,事物控制等. 整个demo分三个 ...

  8. C语言的本质(37)——makefile之隐含规则和模式规则

    Makefile有很多灵活的写法,可以写得更简洁,同时减少出错的可能.本节我们来看看这样一个例子还有哪些改进的余地. 一个目标依赖的所有条件不一定非得写在一条规则中,也可以拆开写,例如: main.o ...

  9. JAVA JNI

    jni非常好的一篇文章 http://m.blog.csdn.net/article/details?id=22827307 JAVA JNI介绍 http://blog.csdn.net/cyg08 ...

  10. VF(动态规划)

    VF 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 Vasya is the beginning mathematician. He decided to make a ...