我有三个模型:客户,公司和用户。客户和用户均属于公司,公司有许多客户如下:
客户:
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');
}
}
}
错误肯定不是由重定向引起的,因为它已经过全面测试。
答案 0 :(得分:1)
问题出在其他地方。
它实际上与find()调用有关。
尝试找到触发错误的确切代码并将其发布到您的问题中。
可能你设置了一些像
这样的条件'conditions' => array(
'name' => 'john'
)
但你最好做点像
'conditions' => array(
'User.name' => 'john'
)
在您创建User
和Company
之间的关系后(这只是一个示例,也许涉及的两个包含者是其他人)Cake开始加入这两个表。因此,当您搜索特定的name
时,mysql不知道您是否需要user
名称或company
名称,因为两个表中都有name
列。
如果查看生成的查询(提供该错误的查询),您将看到两个表已加入。如果您不想要该联接,则必须指定recursive => -1
'conditions' => array(
'name' => 'john'
),
'recursive' => -1