刚开始使用CakePHP和几乎几年后没有使用的PHP ....CakePHP的相加法(外键)
我有一个表的结构是这样的: 父表.... ..客户:
<?php
class Cliente extends AppModel
{
var $name = 'Cliente';
var $validate = array(
'nombre' => array('rule'=>'notEmpty')
);
var $hasMany = array(
'Proyecto' => array(
'className' => 'Proyecto',
'foreignKey' => 'cliente_id',
'order' => 'Proyecto.nombre ASC',
'dependent' => true
)
);
}
?>
表和子表:Proyects .. 客户端可以分配多个项目。
<?php
class Proyecto extends AppModel
{
var $name = 'Proyecto';
var $validate = array(
'nombre' => array('rule'=>'notEmpty')
);
//var $belongsTo = 'Cliente';
var $belongsTo = array(
'Cliente' => array(
'className' => 'Cliente',
'foreignKey' => 'cliente_id'
)
);
}
?>
只能从索引客户端视图添加(INSERT)项目。所以,我有这个附加(anadir)方法:
function anadir($cliente_id, $nombre) {
if (!empty($this->data)) {
// echo "El código de cliente 22222: ". $this->data['Proyecto']['id'] . "</br>";
// echo "El código de cliente fk: ". $this->data['Proyecto']['cliente_id'] . "</br>" ;
// print_r($this->data);
//$this->data['Proyecto']['cliente_id'] = $cliente_id;
if ($this->Proyecto->save($this->data)) {
$this->Session->setFlash('El proyecto ha sido grabado.');
$this->redirect(array('controller'=>'clientes', 'action'=>'listar'));
}
} else {
//echo "El código de cliente 11111: ". $this->data['Proyecto']['id'];
$this->data['Proyecto']['cliente_id'] = $cliente_id;
}
$this->set('idcliente', $cliente_id);
$this->set('nombrecliente', $nombre);
}
我可以在“anadir.ctp”视图显示父客户(和号码),但它总是更新相同proyect,改变了名称,仅限描述。没有ADD/INSERT在表中完成,只有UPDATE。
<!-- File: /app/views/proyectos/anadir.ctp -->
<h1>Añadir proyecto a cliente <?php echo "[$idcliente] - $nombrecliente"; ?></h1>
<?php
//echo $this->Form->create('Proyecto', array('action' => 'anadir'));
echo $this->Form->create('Proyecto', array('url' => '/proyectos/anadir/'.$idcliente.'/'.$nombrecliente)); // array('action' => 'anadir'));
echo $this->Form->input('cliente_id', array('type' => 'hidden'));
echo $this->Form->input('nombre');
echo $this->Form->input('descripcion', array('rows' => '10'));
echo $this->Form->end('Grabar proyecto');
echo $this->Html->link('Cancelar', array('controller'=>'clientes', 'action'=>'listar'));
?>
肯定这是一个新手问题,但我已经尝试了几乎所有的东西。
有什么想法?
在此先感谢。
====最后====
几天后,试图解决这个问题,现在正在运行。但我不明白的问题,我没有解释为什么我有这个奇怪的问题...
所以我期待symfony2也许更难开始,但我希望更灵活(与多主键和外键支持,主要)和cakephp明确。
仔细检查'id'是否存在,并且是'Proyecto'数据库表(而不是'cliente_id')中的主键。可以肯定的是,在if($ this-> Proyecto-> save($ this-> data)){'之前加上'$ this-> Proyecto-> create();'行。 – lxa
数据库表是好的(我认为).. id是主键。如果我把'$ this-> Proyecto-> create();'你说了什么,那么项目就会保存好...与另一个与函数anadir(arg1,arg2)相关的错误 - > Ie:'缺少参数1对于ProyectosController :: anadir()[APP/controllers/proyectos_controller.php,第18行]'Hummmmm .... – ferpega
请参阅下面的答案。 – lxa