您的位置:首页 > 编程语言 > PHP开发

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

2013-10-27 11:25 656 查看
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',指定结果直接显示在数组中,而非是另外一个数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: