TOP(WebOS) |  TOP(Normal) |    AboutUs |  ContcutUs |  Sitemap

hasAndBelongsToMany以下の配列

cakePHPはモデルにアソシエーションを設定すると、子や親のリレーション関係にあるデータも自動的に持ってきてくれるので便利です。
$recursive設定で、階層数やとってこないようにすることもできます。

しかし、hasAndBelongsToManyの場合は、とっては来るのですが、それをキーで囲まないため、「id」「title」と同じ並びに0,1,2と並んでしまいます。

cake/libs/model/datasources/dbo_source.phpの845行目あたり、

    foreach ($merge as $i => $row) {
     if (count($row) == 1) {
      $data[$association][] = $row[$association];
     } else {
      $tmp = array_merge($row[$association], $row);
      unset($tmp[$association]);
      $data[$association][] = $tmp;
     }
    }

を、

    foreach ($merge as $i => $row) {
     if (count($row) == 1) {
      $data[$association]['HABTM'][] = $row[$association]; //<<<
     } else {
      $tmp = array_merge($row[$association], $row);
      unset($tmp[$association]);
      $data[$association]['HABTM'][] = $tmp; //<<<
     }
    }

とすると、[HABTM]=array(,,,)と囲まれます。