【问题标题】:Behavior callbacks and contain conflict行为回调和包含冲突
【发布时间】:2014-02-21 12:41:27
【问题描述】:

我创建了一个带有afterFind() 函数的TranslatableBehavior 来修改我的输出,它可以按我的意愿工作,但仅限于主要结果。当我将模型调用为包含到另一个模型时,回调函数不会激活。

我的结构是这样的:

Category hasMany CategoryDynamic (dynamic table contains the translations).
Category hasMany Item
Item hasMany ItemDynamic (again, here are the item translations)

CategoryItem 都具有可翻译行为。当我进行以下查询时:

$current = $this->Category->find('first', array(
    'conditions' => array('Category.id' => $root),
    'contain' => array(
        'CategoryDynamic', 
        'Item' => array(
            'ItemDynamic'
        ),
    ),
));

它被称为类别,而不是项目。有没有办法让我可以使用包含?

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    只有主模型(在您的情况下为Category)会触发回调。

    很遗憾,如果您想为其他人触发回调,则需要运行单独的查询。

    【讨论】:

      【解决方案2】:

      请指定其他模型的字段。

      如果您在包含问题的同时使用 TranslateBehavior,请务必为您的查询设置“字段”键。否则,您最终可能会生成无效的 SQL。

      http://book.cakephp.org/2.0/en/core-libraries/behaviors/translate.html

      【讨论】:

      • 我猜你误解了这个问题,我没有使用 CakePHP 的默认翻译行为,可翻译是我的自定义行为,问题与行为的作用没有太大关系。无论如何,感谢您的努力,Dave 提供了我需要的答案。
      猜你喜欢
      • 2016-04-19
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      相关资源
      最近更新 更多