ユーザーが投稿を作成してタグ (トピック) を追加できるようにする 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 を使用します。
誰でも助けることができますか?私はこれがかなり複雑だと感じているので...