5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

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!。

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

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

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

著:山田祥寛
¥3,366 (2024/11/21 16:43時点 | Amazon調べ)
著:松浦 健一郎, 著:司 ゆき
¥2,574 (2024/11/21 16:43時点 | Amazon調べ)
著:谷藤賢一, 著:徳丸浩
¥2,750 (2024/11/21 16:43時点 | Amazon調べ)

“CakePHPのhasAndBelongsToMany(HABTM)で、2つのテーブルの関係を削除する話し” への3件のフィードバック

  1. sakanaのアバター

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

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

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

  2. […] This post was mentioned on Twitter by 安藤 宗則/mune ando, gadget. gadget said: #CakePHPのhasAndBelongsToMany(HABTM)で、2つのテーブルの関係を削除したい。: これは悩みました。例えばCakePHPのサイトのよう […]

  3. mune andoのアバター
    mune ando

    sakanaさん

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

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

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

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