CakePHPアプリには次の設定があります。
Posts
id
title
content
Topics
id
title
Topic_Posts
id
topic_id
post_id
つまり、基本的に、すべて一意でIDを持つトピック(タグ)のテーブルがあります。そして、Topic_Posts結合テーブルを使用して投稿にアタッチできます。ユーザーが新しい投稿を作成するとき、コンマで区切られたテキストエリアにトピックを入力してトピックを入力します。トピックがまだ存在しない場合は、トピックテーブルに保存し、参照をTopic_postsテーブルに保存します。私は次のようにモデルを設定しています:
ポストモデル:
class Post extends AppModel
{
public $name = 'Post';
public $hasAndBelongsToMany = array(
'Topic' => array('with' => 'TopicPost')
);
}
トピックモデル:
class Topic extends AppModel
{
public $hasMany = array(
'TopicPost'
);
}
TopicPostモデル:
class TopicPost extends AppModel {
public $belongsTo = array(
'Topic', 'Post'
);
}
そして、New postメソッドについては、これまでのところ次のようになっています。
public function add()
{
if ($this->request->is('post'))
{
//$this->Post->create();
if ($this->Post->saveAll($this->request->data))
{
// Redirect the user to the newly created post (pass the slug for performance)
$this->redirect(array('controller'=>'posts','action'=>'view','id'=>$this->Post->id));
}
else
{
$this->Session->setFlash('Server broke!');
}
}
}
ご覧のとおり、私は使用saveAll
しましたが、トピックデータをどのように処理しますか?
http://bakery.cakephp.org/articles/dooltaz/2007/05/02/simple-tagging-behaviorのようなものを見てきましたが、これをもっとシンプルでモダンなものにしたいと思っています(その記事の日付2007)そして私もCakePHP2.1を使用しています