剛開始使用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