cakephp笔记——在运行期间创建和销毁关联

cakephp进行查找时,如果不对表与表之间的关联进行限制,经常会返回‘一大坨’东西,从而使得返回的数据变得复杂和冗余,所以有时候需要在运行时建立和销毁模型关联。比如以下几种情况:你想减少获取的关联数据的量,但是你的所有关联都是循环的第一级,或者你想要改变定义关联的方法以便排序或者过滤关联数据。因为如果数据表间存在很多关联的话,查询后所返回的值会将所关联的一并返回回来。因此可以使用bindModel()和unbindModel()方法来实现在运行期间创建和销毁关联。

使用例如$this->Leader->unbindModel(array('hasMany' => array('Follower'));即能够将表Leader和表Follower间的关系销毁,从而进行Leader查询的时候不会连带一起查询出后者的数据,但是这种关联的销毁以及创建都是一次性的,只要操作过了一次之后依然恢复到原来的关系。

bindModel() 的基本用法是封装在以你尝试建立的关联类型命名的数组中的常规数组:

1$this->Model->bindModel(
2     array('associationName' => array(
3             'associatedModelClassName' => array(
4                 // normal association keys go here...
5             )
6         )
7     )
8 );

连接表

可以允许你进行跨越多张表的较为复杂的查询,在表间强制添加 join 时,你需要在调用 Model::find() 时使用 “modern” 语法,在 $options 数组中添加 ‘joins’ 键。例如:

 1 $options['joins'] = array(
 2     array('table' => 'channels',
 3         'alias' => 'Channel',
 4         'type' => 'LEFT',
 5         'conditions' => array(
 6             'Channel.id = Item.channel_id',
 7         )
 8     )
 9 );
10 
11 $Item->find('all', $options);

注意 ‘join’ 数组不是一个键。在上面的例子中, Item 的模型 left join 到 channels 表。你可以用模型名为表起别名,以使检索到的数组完全符合 CakePHP 的数据结构。

定义 join 所用的键如下:

  • table: 要连接的表。
  • alias: 表的别名。最好使用关联模型名。
  • type: 连接类型: inner, left 或者 right。
  • conditions: 执行 join 的条件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值