カテゴリー
オープンソース システム関連 覚え書き

#CakePHPのhasAndBelongsToMany(HABTM)で、2つのテーブルの関係を削除したい。

これは悩みました。

例えばCakePHPのサイトのように、RecipeとTagとが多対多の関係でhasAndBelongsToMany(HABTM)で定義されているとき、レシピに複数のタグを追加するには、Recipeモデルで

$data[‘Tag’] = array(1,2);
$this->create();
$this->saveAll($data);

なんてすればいいのですが、その関係を削除したいことがあります。単純に

$data[‘Tag’] = array();
$this->create();
$this->saveAll($data);

とすると、全くTagには影響はありませんでした。ではどうすればいいかというと、正解はこのサイト(Thanks!)。

[amazonjs asin=”4774153249″ locale=”JP” title=”2 実践入門 (WEB+DB PRESS plus)”]

array()をarray(false)にすればいいのですね。

$data[‘Tag’] = array(false);
$this->create();
$this->saveAll($data);

これはわかりませんでした。でも、何かおかしな仕様ですが、しかたありません。

「#CakePHPのhasAndBelongsToMany(HABTM)で、2つのテーブルの関係を削除したい。」への3件の返信

こんにちは。リンク元の主です。

やはり同じ悩みに至る方がいらっしゃるんですね
私がハマった時は検索しても目ぼしい情報が無かったので、
思いつきでfalseをいれてみたんです

変な実装ですよね
もしかしたらfalseで消えるのがバグかもしれないですね(笑)

sakanaさん

コメントありがとうございます。今回は、とても助かりました。この情報が見つからなかったら、無理矢理SQLを発行してしまおうと思っていました。

そうなんですよ。検索してみると、意外とみなさん削除することはしないので考えていないかと。

でも、何も関係はそのままというほうが多いので、こんな仕様になっているのと納得していますが。

将来、仕様が変わらないことを望みます。

コメントは受け付けていません。