【问题标题】:CakePHP containable behaviour not firingCakePHP 可包含的行为未触发
【发布时间】:2012-12-07 12:39:57
【问题描述】:

第一次使用 Cake 及其可包含的行为,但它没有按预期工作......或者根本没有。

我正在尝试获取产品的附件列表。产品型号 HABTM 产品(别名“ProductRelation”)。连接表是 products_products,它有两个产品 ID - product_id 和 related_id。与此相反,我想为给定的 product_id 提取附件列表(从 related_id 列驱动的产品)

在我的产品模型中,我添加了 $actsAs = array('Containable');

在我的控制器中,即使没有条件,使用食谱中的参考对可包含的快速测试也根本无法包含产品。

debug($this->Product->find('all', array('contain' => 'ProductRelation')));

.. 返回数据库中每个产品的数组,以及所有相关模型 - 图像、内容选项卡、评级、评论、定价等我没有尝试对此应用任何“条件”,因为所写的调用应该根据说明书,将数据限制在产品及其 ProductRelation 数据中......

有什么建议吗?

【问题讨论】:

  • 我从未使用过 habtm 别名表,但您的包含不应该包含一组模型吗? 'contain' => array('ProductRelation')
  • 你的 AppModel 中有没有这个:var $actsAs = array( 'Containable' );
  • @BarryChapman 他说他有。
  • 'contain' 不需要是数组,这里被强制转换为数组github.com/cakephp/cakephp/blob/master/lib/Cake/Model/Behavior/…
  • @TimJoyce - 让我参考他所说的话:In my Product model, I've added $actsAs = array('Containable'); 他在Product 模型上拥有它。我声明将其添加到 AppModel 中 - 因为 Containable 需要在所包含的模型上处于活动状态,而不仅仅是执行包含的模型。将其添加到AppModel 自然会使其可用于所有继承AppModel 的模型。

标签: cakephp cakephp-2.0 containable


【解决方案1】:

好像你已经递归了。尝试使用以下内容:

debug($this->Product->find('all', array(
    'contain' => 'ProductRelation',
    'recursive' => -1
)));

如果这对您有用,您应该开始将containable 添加到AppModel 类并将recursive 属性设置为-1。这将确保您只得到您要求的结果。

注意:Cake 没有join 用于HABTM,所以你不能在任何情况下使用ProductRelation

【讨论】:

  • " Cake 不加入 HABTM,因此您不能在任何情况下使用 ProductRelation。" .死了,谢谢。我在这些上使用连接和运行条件来解决它。我想这似乎与其他帖子一样。
猜你喜欢
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多