zoukankan      html  css  js  c++  java
  • 关联[2]

    HAS_MANY 关联表示当前模型拥有多个子对象

    user数据表中的用户可以发布多条留言,创建了think_content数据表,

    其中uid用来关联user中的id

    在 WeiBo/Home/Controller/UserController.class.php 中代码为:

     1 <?php
     2 namespace HomeController;
     3 use ThinkController;
     4 use HomeModelUserModel;
     5 
     6 class UserController extends Controller {
     7     public function index() {        
     8         $user = D('User');
     9         $arr = $user->relation(true)->select();
    10         print_r($arr);
    11     }
    12  }

    在 WeiBo/Home/User/Model/UserModel.class.php 中的代码如下:

     1 <?php
     2 namespace HomeModel;
     3 use ThinkModel;
     4 use ThinkModelRelationModel;
     5 
     6 class UserModel extends RelationModel {
     7     protected $_link = array(
     8        'Content'=>array(
     9             'mapping_type'=>self::HAS_MANY,
    10             'mapping_name'=>'contents',
    11             'class_name'=>'content',
    12             'foreign_key' =>'uid',
    13             'mapping_fields'=>'content',
    14             'mapping_limit'=>'0,2',
    15             'mapping_order'=>'id DESC',
    16             ),
    17     );    
    18 }

    得到的数据为:

    后面还有数据未全部显示。

    用户表和留言表:BELONGS_TO(多对一)表示 N 条留言从属于某个用户。

    新建数据表think_role,用来表示user表中用户的权限:

    新建think_group用来连接user和role表,uid用来指代user中的id对应的用户,gid用来指代role表中的权限:

    在 WeiBo/Home/Controller/UserController.class.php 中代码为:

     1 <?php
     2 namespace HomeController;
     3 use ThinkController;
     4 use HomeModelUserModel;
     5 
     6 class UserController extends Controller {
     7     public function index() {        
     8         $user = D('User');
     9         $arr = $user->relation(true)->select();
    10         print_r($arr);
    11     }
    12  }

    在 WeiBo/Home/User/Model/UserModel.class.php 中代码为:

     1 <?php
     2 namespace HomeModel;
     3 use ThinkModel;
     4 use ThinkModelRelationModel;
     5 
     6 class UserModel extends RelationModel {
     7     protected $_link = array(
     8        'Role'=>array(
     9             'mapping_type'=>self::MANY_TO_MANY,
    10             'relation_table'=>'think_group',
    11             'foreign_key' =>'uid',
    12              'relation_foreign_key'=>'gid',
    13          ),
    14     );    
    15 }

    这时得到的数据为:

    即两个数据表关联起来了,后面还有三组数据没列出来。

    关联也可以向其它数据表的数据进行增删改查,我们使用user和card两个表

    user表:

    card表

     WeiBo/Home/User/Model/UserModel.class.php 中代码进行关联:

     1 namespace HomeModel;
     2 use ThinkModel;
     3 use ThinkModelRelationModel;
     4 
     5 class UserModel extends RelationModel {
     6     protected $_link = array(
     7        'Card'=>array(
     8             'mapping_type'=>self::HAS_ONE,
     9             'foreign_key' =>'uid',
    10                 'mapping_fields'=>'code',
    11                 ),
    12     );    
    13 }

     WeiBo/Home/Controller/UserController.class.php 中的代码进行增删改查操作:

     1 <?php
     2 namespace HomeController;
     3 use ThinkController;
     4 use HomeModelUserModel;
     5 
     6 class UserController extends Controller {
     7     public function index() {        
     8         $user = D('User');
     9         $arr = $user->relation(true)->select();
    10         print_r($arr);
    11     }
    12   public function add() {
    13         $user=D('User');
    14         $data['user']='测试用户';
    15         $data['email']='test@163.com';
    16         $data['Card']=array(
    17             'code'=>'3209xx',
    18             );
    19         $user->relation(true)->add($data);
    20     }
    21     public function delete() {
    22         $user=D('User');
    23         $user->relation(true)->delete(16);
    24     }
    25     public function update() {
    26         $user=D('User');
    27         $data['user']='测试用户54';
    28         $data['email']='test@163.com';
    29         $data['Card']=array(
    30             'code'=>'3909zz',
    31             );
    32         $user->relation(true)->where(array('id'=>20))->save($data);
    33     }
    34  }
  • 相关阅读:
    Python学习笔记-练习编写ATM+购物车(购物商城)
    自动化单元测试(Karma + Mocha)
    Vue
    Vue
    [项目] 网易云音乐项目总结
    Vue项目如何打包问题总结
    实现跨域请求的八种方式
    正则删除字符串左、右或两端的空格经验总结
    数组常用的方法
    为什么import React from 'react',React首字母必须大写?
  • 原文地址:https://www.cnblogs.com/jacson/p/4613777.html
Copyright © 2011-2022 走看看