0

私は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');
?>

これで、「サービス」をカテゴリとしてページを保存すると、すべて正しく保存されるようになりました。ページが保存されname、「サービス」のカテゴリが挿入され、両方が適切にリンクされます。

ただし、「サービス」の同じカテゴリを持つ別のページを追加すると、categoriesテーブル内の既存のレコードを使用する代わりに、Cake は新しいレコードを作成し、代わりにそのレコードをリンクします。既存のレコードを使用するために必要です。

ビュー/コントローラー/データベースを修正して、これを正しく機能させるにはどうすればよいですか?

ありがとう!

4

2 に答える 2

1

これを修正するには、いくつかの解決策があります。

pollirata が提供するソリューションは非常に優れたものです。ユーザーが既に存在するカテゴリを知る最も簡単な方法は、既存のカテゴリを選択して提供することです。単純なテキスト入力を行うと、とにかくスペルミスが発生したり、カテゴリ名が 1 つだけ必要な場合でも非常によく似た名前になったりします。

テキスト入力を保持したい場合は、 beforeSave() 関数で Page.php モデルの既存のカテゴリを確認する必要があります。カテゴリ リストを取得し、$this->data['Category']['name と照合します。 '] 保存しようとしているデータの。既存のカテゴリが一致する場合、その ID を $this->data['Category']['id] に追加して、Cake が新しいレコードを作成しないようにします。

于 2013-04-24T09:52:18.050 に答える
0

レコードを作成するとき、既存のカテゴリの ID を指定する場所はありません。これにより、検索に使用する ID がないため、Cake はそれが新しいレコードであると想定します。

レコードが既に存在することを Cake が理解できるようにするには、そのカテゴリの ID を提供する必要があります。

それが役に立てば幸い

于 2013-04-24T01:30:45.937 に答える