一旦添加了关系CakePHP,就无法创建模型的实例

时间:2014-04-09 10:35:45

标签: cakephp cakephp-2.3

我有三个模型:客户公司用户。客户和用户均属于公司,公司有许多客户如下:

客户:

    var $belongsTo = array(
            'Company' => array(
            'className' => 'Company',
            'foreignKey' => 'company_id',
            'dependent' => false,
        ),
    );

公司:

        var $hasMany = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'company_id',
        'dependent' => false
    ),
    'Customer'=>array(
        'className' => 'Customer',
        'foreignKey' => 'company_id',
        'dependent' => false
    )
);

用户:

        var $belongsTo = array(
        'Company' => array(
        'className' => 'Company',
        'foreignKey' => 'company_id',
        'dependent' => false,
    ),
);

创建/编辑Customer对象时遇到问题。以下是如何创建表单:

    echo $this->Form->input('Customer.customer_nr');
    echo $this->Form->input('Customer.name');
    echo $this->Form->input('Customer.phone');
    echo $this->Form->input('Customer.email');
    echo $this->Form->input('Customer.address');
    echo $this->Form->input('Customer.post_nr');
    echo $this->Form->input('Customer.city');
    echo $this->Form->input('Customer.company_id', array('value' => $current_user['company_id'], 'type'=>'hidden'));

我在表单末尾的操作是从当前登录的用户处获取company_id并将其作为Customer.company_id插入。在新关系出台之前,它曾经没有任何问题地工作。但是现在当我尝试创建/编辑Customer时,我收到以下SQL错误:

Error: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'name' in where clause is ambiguous

非常感谢任何帮助。

这是控制器添加功能:

function add() {



if (!empty($this->data) ) {
    $this->Customer->create();
    if ($this->Customer->save($this->data)) {
        $this->Session->setFlash(__('Customer was saved'), 'positive_notification');
        $this->redirect(array('controller'=>'events', 'action' => 'dashboard'));
    } else {
        $this->Session->setFlash(__('Customer has been saved. Please, try again'), 'negative_notification');
    }
}

}

错误肯定不是由重定向引起的,因为它已经过全面测试。

1 个答案:

答案 0 :(得分:1)

问题出在其他地方。

它实际上与find()调用有关。

尝试找到触发错误的确切代码并将其发布到您的问题中。

可能你设置了一些像

这样的条件
'conditions' => array(
    'name' => 'john' 
)

但你最好做点像

'conditions' => array(
    'User.name' => 'john' 
)

在您创建UserCompany之间的关系后(这只是一个示例,也许涉及的两个包含者是其他人)Cake开始加入这两个表。因此,当您搜索特定的name时,mysql不知道您是否需要user名称或company名称,因为两个表中都有name列。

如果查看生成的查询(提供该错误的查询),您将看到两个表已加入。如果您不想要该联接,则必须指定recursive => -1

'conditions' => array(
    'name' => 'john' 
),
'recursive' => -1