【问题标题】:Cakephp Containable not working at allCakephp Containable 根本不工作
【发布时间】:2014-02-06 09:20:21
【问题描述】:

我一直在用头撞墙。我有一个属于模型购买的模型 Sku。我的 AppModel 有 $actAs=array('Containable') and $recursive=-1

在 SkuController 中,当我执行 $this->Sku->find('all', array('contain' => 'Purchase')); 时,我没有得到购买。我在这里和互联网上的其他地方搜索了许多旧问题,但似乎无法解决这个问题。为了检查是否正在加载 Containable 行为,我在 lib\Cake\Model\Behavior 中编辑了 ContainableBehavior.php 以使其成为无效的 php 文件,但这并没有产生任何错误。到底怎么回事!!

这是来自调试的 SQL:

选择Sku.id, Sku.purchase_id, Sku.item_id, Sku.upc, Sku.quantity_avail, Sku.per_unit_price_amt, Sku.do_not_delete, Sku.created, Sku.modified, (concat('SK',lpad(Sku.id,8,'0'))) AS Sku__idFormatted FROM sellble.skus AS Sku WHERE 1 = 1 ORDER BY Sku.id desc

CakePHP 版本:2.4.4

【问题讨论】:

  • Sku 模型是否与购买关联?
  • 您使用的是actAs 还是正确的actsAs 变量?您的变量分配是否公开,即public $actsAs = array('Containable');?如果您删除递归设置,购买数据是否会返回到您的查找中(只是为了检查关联)?如果您创建模型的反射,它是否在 actAs 变量中携带包含“可包含”的数组?

标签: cakephp containable


【解决方案1】:

不确定这是否在不同版本之间有所不同,但我总是在数组中指定包含,这对我来说很好。

$this->Sku->find('all', array('contain' => array('Purchase')));

或仅映射您想要的字段或条件:

$this->Sku->find('all',
     array('contain' => array(
         'Purchase' => array(
             'fields' => Purchase.name
             'conditions' => array(
                  Purchase.name = 'somename'
                  )
             )
         )
     )
);

【讨论】:

  • 两个都试过了,但没有帮助..我只是认为 ContainableBehavior 甚至没有被加载
  • 你的$actAs 有错别字,应该是$actsAs。否则你的配置看起来和我的一模一样,所以很抱歉无法进一步说明为什么它没有加载。
  • 天哪!我一定是瞎了.. Ty Ty Ty.. 看到那个愚蠢的错误感到很惭愧,当然正是这些蹩脚的错误让程序员的生活变得悲惨.. Ty 再次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 2012-10-02
  • 2011-12-29
相关资源
最近更新 更多