Question

J'ai un petit modèle de base de données complexe sur lequel je ne suis pas en mesure de faire une bonne trouvaille

utilisateur (id, nom ...)

1 Harsha

2 Jasmine

modules (id, name)

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)

Avis (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)

Je suis en train de trouver les examens effectués par Harsha de tous les restaurants, mais ne suis pas en mesure de les limiter aux critiques des restaurants seuls. Je reviens les dish aussi

Voici le code que je l'ai utilisé         // vérifie si l'utilisateur est connecté si oui fronces de 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')))))));
Était-ce utile?

La solution

    // 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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top