2012-02-20 7 views
1

hasManyから関連するデータをテーブルに表示しようとしました。これはjoinModelを見つけることですが、他のテーブルのデータには拡張しません。CakePHPがhasMany関係で読み込み

項目モデル

class Item extends AppModel { 
public $name = 'Item'; 
    public $belongsTo = array('Category'); 
    public $hasMany = array('GroclistItem'); 
} 

Groclistモデル

class Groclist extends AppModel { 
public $name = 'Groclist'; 
    public $belongsTo = array('Category'); 
    public $hasMany = array('GroclistItem'); 
} 

GroclistItemモデル

class GroclistItem extends AppModel { 
public $name = 'GroclistItem'; 
    public $belongsTo = array('Groclist', 'Item'); 
    public $useTable = 'groclists_items'; 
} 

GroclistControllerビューアクション:$ groclistの

public function view($id = null) { 
    if (!$id) { 
     $this->Session->setFlash(__('Invalid list', true)); 
     $this->redirect(array('action' => 'index')); 
    } 
    $this->set('groclist', $this->Groclist->read(null, $id)); 
} 

デバッグ:

app\View\Groclists\view.ctp (line 80) 
Array 
(
[Groclist] => Array 
    (
     [id] => 3 
     [name] => This Week 
     [user_id] => 
     [sunday] => Pizza 
     [monday] => Scallops 
     [tuesday] => Stuffed Mushrooms 
     [wednesday] => Mustard Chicken with Daulphanois Potatoes 
     [thursday] => Sizzling Chicken and Cheese 
     [friday] => Walkabout Soup with Beer Bread 
     [saturday] => Paradise Indian 
     [created] => 2011-09-15 14:42:55 
     [modified] => 2012-02-19 16:51:00 
    ) 

[GroclistItem] => Array 
    (
     [0] => Array 
      (
       [id] => 18 
       [item_id] => 24 
       [groclist_id] => 3 
      ) 

     [1] => Array 
      (
       [id] => 17 
       [item_id] => 23 
       [groclist_id] => 3 
      ) 

    ) 

) 

私はGroclistItem配列は、ダイエットコークなど食料品のリスト項目であるべき項目データを表示したいと思いますか石鹸。それはそこに正しい関連を見つけることです。

+0

あなたがアイテムのモデルとGroclistItemモデルを持っていないのはなぜ? GroclistItemが特定のタイプのItemである場合、Groclistには多くのアイテムが必要ですか? – swiecki

+0

あなたのGroclistItemテーブルは、hasAndBelongsToMany関係のjoinTableのように見えます – papachan

答えて

3

GroclistControllerビューアクション:

public function view($id = null) { 
if (!$id) { 
    $this->Session->setFlash(__('Invalid list', true)); 
    $this->redirect(array('action' => 'index')); 
} 
$this->Groclist->recursive =2; 
$this->set('groclist', $this->Groclist->read(null, $id)); 
} 
+0

このメソッドは機能しますが、15個のアイテムを追加した後、32個のデータベースクエリが約8 msかかります。私の質問は、このスケールがどれほどうまくいくのでしょうか? – Chris

+0

次に、コンテナ可能なものを使用する必要があります:http://book.cakephp.org/1.3/view/1323/ContainableまたはunBindModelを使用してください:http://book.cakephp.org/1.3/view/1045/Creating-and-Destroying -Associations-on-the-Fly – chetanspeed511987

関連する問題