2

我正在写一个 CakePHP 插件。在我的插件中,AppModel我有:

public $actsAs = array(
    'Containable'
);

然后我有两个模型: aCartItem和 a Product。我的CartItem模型如下所示:

<?php
class CartItem extends ShoppingCartAppModel {

    public $belongsTo = array(
        'Cart',
        'Product'
    );
}

但是,Cart在我的控制器中调用模型时,出现以下错误:

警告 (512):模型“CartItem”与模型“产品”无关 [CORE/Cake/Model/Behavior/ContainableBehavior.php,第 344 行]

为什么会这样,当我定义我的模型通过CartItem关联与模型关联时?ProductbelongsTo

Cart编辑:我已经将我的问题缩小到我试图在我的模型中获取我的购物车及其内容的地方。这是电话:

public function findBySessionId($sessionId) {
    $cart = $this->find('first', array(
        'conditions' => array(
            'Cart.session_id' => $sessionId
        ),
        'contain' => array(
            'CartItem' => array(
                'Product'
            )
        )
    ));
    return $cart;
}
4

2 回答 2

2

模型关联需要插件前缀

从问题来看,购物车模型很可能是这样定义的:

    public $hasMany = array(
        'CartItem'
    );
}

这将意味着 Cake 期待以下内容:

app
    Model
        CartItem.php <- 'CartItem' means the model is in the App, not a plugin
    Plugin
        Model
            Cart.php

AppCartItem模型不存在,因此将是AppModel.

在定义模型关联时,始终确保使用插件前缀(如果适用):

    public $hasMany = array(
        'ShoppingCart.CartItem' // Load the model from this same plugin
    );
}
于 2013-07-21T13:37:35.173 回答
0

想通了问题。插件中的模型需要类名中的插件名称。

例如:

<?php
class Cart {

    public $hasMany = array(
        'CartItem' => array(
            'className' => 'ShoppingCart.CartItem'
        )
    );
}

仅在关联名称中指定插件名称对我来说会导致 SQL 错误,因此您可以通过手动指定类名称(带有插件前缀)来规避。

于 2013-07-21T17:25:52.427 回答