2010-10-28 5 views
0

J'ai un petit modèle de base de données complexe sur lequel je ne suis pas en mesure de faire un bon trouverCakePHP Relation complexe Trouver

utilisateur (id, nom ...)

1 Harsha 

2 Jasmine 

modules (id, nom)

1 Users 

2 Restaurants 

3 Dishes 

restaurant (id, nom ....)

1 KFC 

2 Pizza Hut 
plats

(id, nom, restaurant_id ..)

1 Cheese Pizza 2 

articles (id, MODULE_ID, item_id)

1 1 1 (refers to User Harsha) 

2 2 1 (Refers to KFC) 

3 2 2 (Refers to Pizza Hut) 

4 1 2 (Refers to User Jasmine) 

5 3 1 (Refers to Cheese Pizza) 

commentaires (id, id_parent, message, item_id, commenters_id)

1 0 "I love the ambience of Pizza Hut" 3 1 (Refers to Harsha reviewing Pizza Hut) 

2 1 "You remind me of that kid in the next table who freaked me out." 3 2 (Refers to Jasmine Replying to Harsha's review on Pizza Hut) 

3 0 "I love Cheese Pizza in Pizza Hut" 5 1 (Refers to the Cheese Pizza Review by Harsha) 

J'essaie de trouver les critiques faites par Harsha de tous les restaurants, mais je ne suis pas en mesure de les limiter aux critiques de restaurants seul. Je reviens les avis Dish aussi

Voici le code que je l'ai utilisé // vérifie si l'utilisateur est connecté si oui recueille l'ID $ id = $ this -> _ loggedIn();

// Find the ItemID from the Item Table 
    $itemId = $this->User->Item->itemId('1', $id); 

    // Finding the User Data and last Status Message 
    $user = $this->User->Item->find('first', array('conditions' => array('Item.id' => $itemId), 'contain' => array('User', 'StatusMessage' => array('limit' => 1, 'order' => 'StatusMessage.created DESC')))); 

    // Find the Restaurant Reviews of the Current User 
    $reviews = $this->User->Item->Review->find('all', array('conditions' => array('Review.commenters_item_id' => $itemId, 'Review.pid = 0'), 'order' => array('Review.created DESC'), 
    'contain' => array(
     'Item' => array(
      'User' => array(
       'fields' => array('id', 'first_name', 'last_name', 'username', 'file')), 
      'Restaurant' => array('fields' => array('id', 'name', 'slug', 'file', 'area_id', 'city_id'), 
       'Area')), 
     'ReviewReply' => array(
      'Item' => array(
       'User' => array(
        'fields' => array('id', 'first_name', 'last_name', 'username', 'file'))))))); 

Répondre

1
// I find it clearer to do the contain like this 

    $this->Review->contain(array('Item','Item.User','Item.Restaurant', 'ReviewReply' etc... )); 

    // Again I find it clearer this way as it avoids long lines and deeply indented arrays. 

    $conditions = array(
     'Review.commenters_item_id' => $itemId, 
     'Review.pid' => 0, // should this be parent_id? 
     'Item.module_id' => 2 
     ); 
    $this->Review->find('all', array('conditions' => $conditions, 'order'=> 
    //... 
    //etc. 
+0

cool .. mais quand je fais la recherche Je reçois les commentaires de la personne .. Restaurant ainsi que des plats –

+0

Avez-vous inclus la ligne id du module? – Leo

+0

non. Je pensais que les coditions à ce niveau est pour seulement trouver à partir de la table référencée ce tableau de révision. sensationnel. Le gâteau est magique: D –

Questions connexes