我有Page
模型和Category
模型。基本上,每个页面属于一个类别。模型设置为Page belongsTo Category
和Category hasMany Page
。
添加新页面时,我正在使用此控制器操作:
public function admin_add() {
if($this->request->is('post')) {
$this->Page->create();
if($this->Page->saveAssocated($this->request->data)) {
$this->Session->setFlash('The page has been created.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to save the page.');
}
}
}
这是该行动的观点:
<h1>Add Page</h1>
<?php
echo $this->Form->create('Page');
echo $this->Form->input('Page.title', array('required' => 'required'));
echo $this->Form->input('Page.body', array('type' => 'textarea', 'class' => 'redactor', 'required' => 'required'));
echo $this->Form->input('Category.name');
echo $this->Form->input('Page.in_header');
echo $this->Form->end('Save Page');
?>
现在,当我以“服务”作为类别保存页面时,所有内容都会正确保存。页面将被保存,并且插入了“{1”}“服务”类别,并且它们都可以正常链接。
但是,当我添加具有相同类别“服务”的另一个页面时,而不是使用name
表中的现有记录而不是使用新的那个并将其链接起来。我需要它来使用现有记录。
如何修复我的视图/控制器/数据库以使其正常工作?
谢谢!
答案 0 :(得分:1)
您有多种解决方案可以解决此问题。
pollirata提供的解决方案非常好。提供具有现有类别的选择是用户知道哪些类别已存在的最简单方式。简单的文本输入无论如何都会导致拼写错误,或者当你只需要一个非常相似的类别名称时。
如果您想保留文本输入,那么您应该在beforeSave()函数中检查Page.php模型中的现有类别:检索类别列表并将其与$ this-&gt; data ['Category'匹配] ['name']您要保存的数据。如果现有类别匹配,请在$ this-&gt; data ['Category'] ['id]中添加其ID,以便Cake不会创建新记录。
答案 1 :(得分:0)
创建记录时,您无法指定现有类别的ID。由此,Cake认为它是一个新记录,因为没有用于搜索的ID。
您需要提供该类别的ID,以帮助Cake了解该记录已存在
希望有所帮助