2011-09-16 15 views
0

私はおそらくここで痛いほど明白な何かを見逃しています。私はCakeで複数のテーブルを結合しようとしていますが、最初のテーブルからフィールドを取得するだけです。次のコードを考えてみましょう。..CakePHPモデルのジョインに問題があり、ジョインされたテーブルのフィールドが欠落しています。

$joins = array(); 
$joins[] = array(
      'table' => 'products', 
      'alias' => 'Product', 
      'type' => 'LEFT', 
      'conditions' => array(
       'Device.id = Product.device_id' 
      ) 
    ); 

$joins[] = array(
      'table' => 'pricepoints', 
      'alias' => 'Pricepoints', 
      'type' => 'LEFT', 
      'conditions' => array(
       'Pricepoints.product_id = Product.id' 
      ) 
    ); 
$all_products = $this->Device->find('all', array("joins" => $joins); 

そして、これは、次のSQL

SELECT `Device`.`id`, `Device`.`manufacturer_id`, `Device`.`name`, `Device`.`type_id`, `Manufacturer`.`id`, `Manufacturer`.`name` FROM `devices` AS `Device` LEFT JOIN products AS `Product` ON (`Device`.`id` = `Product`.`device_id`) LEFT JOIN pricepoints AS `Pricepoints` ON (`Pricepoints`.`product_id` = `Product`.`id`) LEFT JOIN `manufacturers` AS `Manufacturer` ON (`Device`.`manufacturer_id` = `Manufacturer`.`id`) 

すなわちを返します。それは親モデルからのフィールドのみを返します。デバイス。どのようにして結合のすべてのフィールドを選択するのですか?私のモデル関係をセットアップする方法とは関係ないと推測していますが、これらは正しく設定されていると思います。

誰でも教えてください?

答えて

7

あなたは、検索クエリ内のフィールドを指定することができます。

$all_products = $this->Device->find('all', array("fields" => array('Device.*','Product.*','Pricepoints.*') 
               "joins" => $joins 
); 

希望これは

+1

の詳細については、cookbookを参照してください。@pleasedontbelongは、デバイスモデルに直接関連付けられていないので、フィールドを指定する必要があると言います。多くのまたはbelongsToやHABTMのような関連付けを使用する場合は、recursiveオプションを使用して、ケーキのウェブサイトに記載されていない – api55

+0

のモデルに関連するデータを表示することができます。 – neobie

関連する問題