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

 

  

 

posted @ 2015-01-19 10:30 brudeke 阅读(6765) 评论(0) 推荐(2) 编辑
摘要: 使用过Laravel的同学都知道Facades 的强大,下面就让我们一起创建一个Facades 实例。如有不正确的地方,还请不吝赐教。 1. 实现Laravel的自动加载功能 首先建立目录app/lib/Myapp,然后添加目录到composer.json中 2. 实现功能类 实现能能类 app/l 阅读全文
posted @ 2015-01-18 19:06 brudeke 阅读(1461) 评论(0) 推荐(0) 编辑
摘要: Packages是向Laravel中添加功能最重要的途径。composer.json中require的都是包。关于包的详细说明请查看 API . 下面一起创建一个简单的Package : 1. 环境配置 我们以Artisan的workbench命令来创建一个Package ,首先要配置 app/co 阅读全文
posted @ 2015-01-18 10:10 brudeke 阅读(1761) 评论(0) 推荐(0) 编辑
摘要: 最近在学习Laravel,觉得ORM功能很强大,我这里只是简单探索了一点,如果有更好的笔记,还请分享。 因为重点在于Eloquent ORM,所以路由设置,控制器就不详细描述了,这里直接进入Models么模块。 1.数据库准备(Mysql) 在这里需要创建users和users_ext两张表,并初始 阅读全文
posted @ 2015-01-16 11:19 brudeke 阅读(2821) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示