unbindmodel - savefield cakephp




Trova le condizioni con hasMany model (2)

È necessario chiamare il Behaivor contenibile sul modello

<?php
class Item extends AppModel {
    public $actsAs = array('Containable');
}

nel tuo controller puoi fare la query

$items = $this->Item->find('all', array(
           'contain'=>array(
                 'ItemDetail',                                                                
                 'Category'=>array(
                       'conditions'=>array('Category.item_category_id'=>1)
                  ),
                 'Favorite'=>array(
                       'conditions'=>array('Favorite.member_id'=>8)
                  )
              )
          );
$this->set('test', $items);

prova ad usare Joins

$items = $this->Item->find('all', array(
            'joins' => array( 
                        array( 
                            'table' => 'categories', 
                            'alias' => 'Category', 
                            'type' => 'inner',  
                            'conditions'=> array('Category.item_category_id' => 1) 
                        ), 
                        array( 
                            'table' => 'favorites', 
                            'alias' => 'Favorite', 
                            'type' => 'inner',  
                            'conditions'=> array('Favorite.member_id' => 8, 'Item.id = Favorite.item_id') 
                            )
                        ),
           'contain'=>array('ItemDetail','Category','Favorite')
          );
$this->set('test', $items);

Ho 4 modello:

Articolo ------ hasMany ----> Dettaglio

Articolo ------ hasMany ----> Favorite

Articolo ------ hasMany ----> Categoria

Come posso trovare tutti gli articoli con Favourite.member_id = '8' e Category.item_category_id = '1'

Ecco la relazione del mio articolo:

public $hasMany = array(                
    'Detail' => array(
        'className' => 'Detail',
        'foreignKey' => 'item_id',
        'dependent' => true,
        'conditions' => '',
        'order' => 'created DESC',          
    ),      
    'Category' => array(
        'className' => 'Category',
        'foreignKey' => 'item_id',
        'dependent' => true,
        'conditions' => '',
        'order' => 'created DESC',          
    ),
    'Favorite' => array(
        'className' => 'Favorite',
        'foreignKey' => 'item_id',
        'dependent' => true,
        'conditions' => '',
        'order' => 'created DESC',          
    )

);

Ho usato questa query () ed è ok:

$this->set('test',$this->Item->query("SELECT items.*
                                        FROM items, categories, favourites
                                        WHERE items.id = items_item_categories.item_id
                                        AND items.id = favorites.item_id
                                        AND categories.item_category_id = 1 AND favourites.member_id = 8"));

Ma non mi piace usare query (), e lo cambio in find (), e non sembra buono:

$this->set('test',$this->Item->find('all', array(
                                                'contain'=>array(
                                                    'ItemDetail',
                                                    'Category'=>array('conditions'=>array('Category.item_category_id'=>1)),
                                                    'Favorite'=>array('conditions'=>array('Favorite.member_id'=>8)));

Puoi anche provare qualcosa come questo:

$this->Item->hasMany['Favorite']['conditions']['member_id'] = 8;

Quale ha lo stesso effetto di riconciliare il modello con la condizione.

Solo un possibile problema. Quanto sopra aggiungerà la condizione per il resto della richiesta, se si desidera ripristinare il comportamento precedente, è necessario annullare la condizione:

unset($this->Item->hasMany['Favorite']['conditions']['member_id']);

Ricordarsi di impostare la proprietà $ this-> Item-> recursive sul valore desiderato ( attributo ricorsivo ). Il valore predefinito è 1, che è il minimo necessario per far funzionare tutto questo.





condition