3

HABTMに関連する質問は、stackoverflowにかなりの数で投稿されていますが、私はまだ問題の解決策を探しています。

特定のサブカテゴリに基づいてトピックを作成できるアプリケーションを作成しています。トピックを追加するときに、ユーザーは(同じフォームで)タグを求められます。これで、ユーザーが[追加]ボタンをクリックしてトピックへのタグの追加を終了すると、トピックは正常に追加されますが、タグは追加されません。

トピックとタグの両方の結合テーブルをtbl_tags_topics.(cakephpの規則で定義されているように)作成し、トピックとタグの両方のモデルで「hasAndBelongsToMany」配列を適切に定義しました。

私は今どのようなステップを逃していますか?

これに関連する質問がもう1つありますが、トピックに関連するタグをデータベースに正常に送信できるようになったら投稿します。(機能は、stackoverflowのタグの追加と添付の機能に似ています)

どんな助けでも大歓迎です。また、もし見つけたら、HABTMに関する良いチュートリアルを教えてください。

ありがとう

4

2 に答える 2

5

フィールドの1つを保存するときは、次のようなパラメーターを渡します。

$this->Model->save(
    'Model' => array('id' => 1, 'name' => 'one random field)
);

HABTMであるタグがある場合は、次のようにすることができます。

$this->Model->save(
    'Model' => array('id' => 1, 'name' => 'one random field'),
    'Tag' => array('Tag' => array(1))
);

ただし、このネイティブ機能には問題があります。オブジェクトを保存するたびに、保存した配列にすべてのタグを渡す必要があるということです。それ以外の場合は、再追加す​​る前にすべて削除されます。

ただし、拡張アソシエーションと呼ばれるプラグインであるパン屋で見つけることができます。

それを使用して、あなたはするでしょう:

$this->Model->habtmAdd('Tag', 1, 1);

ここで、最初の「1」はモデルのオブジェクトIDです。2つ目は、タグのオブジェクトIDです。

そしてタグを削除するには:

$this->Post->habtmDelete('Tag', 1, 1); 
于 2009-10-19T14:55:40.420 に答える
3

Stornvig氏の助けを借りて、私は自分の問題を解決することができました。これは、cakephpでそのような機能を実現する方法の完全な手順を説明するリンクです。これは、HABTMの関係についてさらに学ぶための素晴らしいチュートリアルです。

バージョン1.3の場合、この手法が役立つことがわかりました。手順は次のとおりです。

両方のモデルでHABTM関係配列を定義した後

このようなフォームを作成します

echo $form->create('Job');
echo $form->input('title');
echo $form->input('description');
echo $form->input('location');
echo $form->input('Category');//note the caps and single plural
$form->end('Submit');

次に、コントローラーの追加メソッドで、

saveAll($ this-> data)

また、結合テーブルには必要なレコードも入力されます。

より詳しい情報

于 2009-10-23T06:10:42.287 に答える