我在设计数据库和围绕它的CakePHP代码时遇到了问题。
我有4个模特,
在ServerName中,我想保存所有ServerNames,然后可以在其他三个模型中的任何一个中使用。我怎样才能实现,我只能将一个ServerName链接到其他模型之一?
提前谢谢你们。
编辑:
我现在做的有点不同了。首先,它需要在模型本身中完成。 我在cakePHP的模型中使用了validate选项。
代码是这样的:
public $validate = array(
'server_name_id' => array(
'rule' => 'serverNameTaken',
'message' => 'This Servername has already been taken.'
)
);
public function serverNameTaken()
{
$this->ManagedServer = ClassRegistry::init("ManagedServer");
// Assuming the server_name_id was passed from the form...
$server_name_id = $this->data['VirtualMachine']['server_name_id'];
// Check if this servername_id is already saved in virtual_machines
if ($this->ManagedServer->find('count', array(
'conditions' => array(
'ManagedServer.server_name_id' => $server_name_id
)
)) > 0
) {
// Found the server_name in the VirtualMachine model!
return false; // Prohibit saving the data
}
if ($this->find('count', array(
'conditions' => array(
'VirtualMachine.server_name_id' => $server_name_id
)
)) > 0
) {
// Found the server_name in the VirtualMachine model!
return false; // Prohibit saving the data
}
// Do this for the other models too. If a return false is not hit by now,
// everything should be fine and you can...
return true;
}
我在其他模型中使用的代码相同,只需更改代码。
再次感谢您的回答!!!
答案 0 :(得分:0)
您无法在模型图层上执行此操作。模型要么关联,要么不关联。您可能正在寻找的是Controller中的一些逻辑,用于检查ServerName X的行是否已在任何其他模型中保存,然后再从另一个模型保存。
beforeSave功能对此非常有用。例如,在您的Controller中,输入:
public $uses = array('VirtualMachine', 'ServerHousing', 'ManagedServer');
public function beforeSave() {
// Assuming the servername_id was passed from the form...
$servername_id = $this->request->data['servername_id'];
// Check if this servername_id is already saved in virtual_machines
if($this->VirtualMachine->find('count', array(
'conditions' => array(
'VirtualMachine.servername_id' => $servername_id
)
)) > 0) {
// Found the servername in the VirtualMachine model!
return false; // Prohibit saving the data
}
// Do this for the other models too. If a return false is not hit by now,
// everything should be fine and you can...
return true;
}
希望这会让你朝着正确的方向前进。