Eloquent ORM 之關聯查詢


  小伙伴們好,本文是在我的前一篇隨筆的基礎上完成的,還沒有瀏覽的同學,請移尊駕哦 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

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM