0

ユーザーが投稿を作成してタグ (トピック) を追加できるようにする CakePHP アプリを作成しました。データベースとアソシエーションの構造はここで見ることができます:

結合テーブルを介して Contain を使用してデータを正常に引き出すことができました。しかし今、私はユーザーがトピックを入力する部分を構築し、トピック テーブルと Topic_post テーブルの両方に保存しようとしています。

次のコードを使用して、新しい投稿メソッドを追加します。

if ($this->request->is('post'))
        {
            //$this->Post->create();

            if ($this->Post->save($this->request->data))
            {
                // Save extra data
                $this->Post->saveField('user_id', $this->Auth->user('id'));
                $this->Post->saveField('datetime', date('Y-m-d H:i:s'));
                $this->Post->saveField('modified', date('Y-m-d H:i:s'));
                $this->Post->saveField('status', 1);

                // Build slug
                $post_title = Sanitize::html($this->request->data['Post']['title'], array('remove'=>true, 'quotes' => ENT_NOQUOTES));
                $post_title = String::truncate($post_title, 50, array('exact'=>false,'html'=>false,'ending'=>''));
                $this->Post->saveField('slug', Inflector::slug($post_title));

                // Redirect the user to the newly created post (pass the slug for performance)
                $this->redirect(array('controller'=>'posts','action'=>'view','id'=>Tiny::toTiny($this->Post->id),'slug'=>$this->Post->slug));
            }
            else
            {
                $this->Session->setFlash('Server broke!');
            }
        }

そこで、ここで入力した関連トピック データをビューに保存する必要があります。

<?php echo $this->Form->create(); ?>

<?php echo $this->Form->input('Post.title'); ?>

<?php echo $this->Form->input('Post.content', array('type'=>'textarea','label'=>false)); ?>

<?php echo $this->Form->input('Topic.title', array('type'=>'textarea','label'=>'Topics')); ?>

<button type="submit" class="orangeButton small">Create</button>

<?php echo $this->Form->end(); ?>

私はCakePHPのドキュメントを見てきましたが、saveAllのようなものが必要ですか? しかし、私はそれを使用する方法が 100% わからないので混乱しています。また、ユーザーは複数のトピックをデータベースに保存でき、トピック自体はすべて一意であるため、たとえば作成できないことに注意することが重要です。トピックが既に存在する場合は、代わりにリンカーの既存の ID を使用します。

誰でも助けることができますか?私はこれがかなり複雑だと感じているので...

4

1 に答える 1

2

あなたは次のようなことをすることができます:


$this->Post->saveAll($this->data, array('validate'=>'first'));

array('validate' =>'first');の使用 保存する前に、両方のモデルが検証されていることを確認します。そのようなことを意味しましたか?

それが役に立てば幸い

于 2012-04-09T09:56:17.190 に答える