親子の自己関連付けテーブルがあります。id=parent_idの場合、そのIDはそれ自身の親です。ただし、アクション/ビューの追加からテーブルにデータを保存するのに問題があります
add.ctpビューから-新しいレコードを追加するときに、ドロップダウンボックスからparent_idを選択し、名前を入力します。
<?php
echo $this->Form->input('parent_id', array('empty' => 'No Parent'));
echo $this->Form->input('name');
?>
ユーザーが「親なし」を選択した場合、これは、parent_id = idが必要であることを意味します。ここで、idは、保存時にDBに自動的に作成される一意のIDです。
これは、「親なし」が選択されたときに$ this->request->dataに渡されるものです。
array(
'Item' => array(
'parent_id' => '',
'name' => 'testname'
)
)
beforeSaveでparent_id=idを設定しようとしましたが、idがまだ存在しないため、parent_idを割り当てるものがありません。また、最初に「親」モデルのsaveを呼び出し、コントローラーでsaveAllを呼び出してみましたが、どちらも機能しません。
コントローラ
public function add() {
if ($this->request->is('post')) {
$this->Item->create();
//have tried calling parent model in self association first but
//if ($this->Item->ParentItem->save($this->request->data)) {
if ($this->Item->saveAll($this->request->data)) {
$this->Session->setFlash(__('The item has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The item could not be saved. Please, try again.'));
}
}
Item.php/モデルの関係
public $belongsTo = array(
'ParentItem' => array(
'className' => 'Item',
'foreignKey' => 'parent_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
public $hasMany = array(
'ChildItem' => array(
'className' => 'Item',
'foreignKey' => 'parent_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
)
);
作成/保存したばかりのIDを取得して、別のフィールド(この場合はparent_id)に保存するにはどうすればよいですか?
更新:私はこれにもう少し取り組んでおり、getInsertId()を使用して最後に挿入されたIDを取得し、それをparent_idに保存しようとしていますが、これを妨げるものがあります。モデルの検証をすべて削除して、そうでないことを確認しました。しかし、Cake(または私の関連付けの設定)には、parent_id = idを許可しないものがあります(つまり、行はそれ自体の親ですか?
これは私の追加アクションの最新のコードです...これは行をDBに保存しますが、parent_idはありません。次に、追加アクションを使用して編集を試み、parent_id = idを設定しますが、編集しても保存できません。
public function add() {
if ($this->request->is('post')) {
$this->Item->create();
if ($this->Item->save($this->request->data)) {
$last_id = $this->Item->getInsertId();
$this->Item->saveField('parent_id', $last_id);
$this->Session->setFlash(__('The item has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The item could not be saved. Please, try again.'));
}
}
$ this-> Item-> ParentItem-> save()、saveAll、'deep' => trueも呼び出してみましたが、それでもparent_id列を更新できません。行ge
前もって感謝します