• ThinkPHP第十四天(显示TRACE界面配置,关联模型详解定义)


    1、显示TRACE界面,首选需要在显示模版界面,$this->display(),然后需要在配置文件中配置

      SHOW_PAGE_TRACE => true

    2、关联模型使用

      主表以user为例

      定义关联模型:

      Class UserRelationModel extends RelationModel{
    
      {
    
        protected $tableName = 'User';//由于在定义关联模型的时候不是使用了默认名称UserModel而是使用的是UserRelationModel,就需要定义$tableName变量
    
        protected $_link = array(
    
          'profile'=>array(//关联表1 profile档案表 关联名称一般命名成 关联表名 如果不是 在需要定义 mapping_class 表名
    
            'mapping_type'=>HAS_ONE,//主表与从表的关系 HAS_MANY BELONGS_TO MANY_TO_MANY
            'mapping_class'=>'Profile',//关联的模型类名 一般以关联表名命名。如果关联名称命名为表名了 此处可以不定义。
            'mapping_name'=>'profile',//关联映射名称,用于读取或更新时 显示的 字段名称 例如:关联读取的时候 在数组中得到的profile中数据会作为 mapping_name中定义名字作为数组键名
            'foreign_key'=>'uid',//外键名,这里指profile中的外键
          ),
    
        );
    
      }

     3、MANY_TO_MANY 关联模式:需要有一个中间表

      blog表中每个文章有多个属性(置顶、推荐、精华等)

      attr表中每个属性都可以存在与多篇文章中

      这样子必须有一个中间表 blog_attr,其表结构只需要为 bid aid ,其中bid为blog id ,aid 为attr id

      Class BlogRelationModel extends RelationModel{
    
        protected $tableName = 'blog',
    
        protected $_link = array(
    
          'attr'=>array(
    
            'mapping_type'=>MANY_TO_MANY,//关联类型
    
            'mapping_name'=>'attribute',//映射名称
    
            'foreign_key'=>'bid',//主表在中间表中的外键
    
            'relation_foreign_key'=>'aid',//关联表在中间表中的外键
    
            'relation_table'=>'blog_attr',//中间表名称
    
          ),
    
        );
    
      }

    ThinkPHP3.1.3在关联多对多插入数据的时候会将中间表数据先清除,这是个小bug,多对多关联更新的时候需要重新编辑代码

    4、在ThinkPHP中插入数据采用M('user')->add($data);其中$data是一个一位数组

      $data = array(

        'name'=>'11111',

        'age'=>'20'

      );

      如果要一次性插入多条数据,可以用addAll($data);其中$data是二维数组。

      也可以自己组合SQL语句的方式插入多条数据 $sql = "INSERT INTO user(name,age) values('111','1'),('222','2')"

        INSERT [LOW_PRIORITY | DELAYED] [IGNORE]  
        [INTO] tbl_name [(col_name,...)]  
        VALUES (expression,...),(...),... 

       M('user')->query($sql);执行sql语句。

    5、一个关联模型中可以关联多个表,在控制器使用方式如下:

      D('UserRelation')->relation(true)->select();

      如果里面存在多个关联方式,而不是要全部使用可以采用

      D('UserRelation')->relation('profile')->select()方式,选择其中一个。

    6、mapping_fields=>'字段列表' 指定关联表中读取那些字段。as_fields=>'字段1,字段2:显示名2',指定结果直接显示在数组中,而非是另外一个数组。

  • 相关阅读:
    方法要求ref object参数, 如果传递double值?
    注册表获取exe位置+ Process类启动exe+参数让exe打开指定文件
    ArcEngine 实现SurfaceAnalysis中的Cut/Fill功能
    ArcEngine 3D extension has not been enabled .
    ArcEngine 实现 SurfaceAnalysis的Area/Volumn功能
    安装部署程序,将安装目录写入注册表
    About Death _Island
    73 Left(Lake DT) . Neophocaena phoconoides(江豚) 20120419
    判断是否安装客户端,没有安装则进行下载
    ArcEngine 没有Esri.ArcGis.GeoAnalyst 命名空间
  • 原文地址:https://www.cnblogs.com/huilange/p/3390716.html
Copyright © 2020-2023  润新知