hasmany cakephp2 cake book belongsto cakephp model find condition

cakephp2 - Encuentra condiciones con el modelo hasMany



cake php book (2)

Tengo 4 modelos:

Artículo ------ hasMany ----> Detalle

Artículo ------ hasMany ----> Favorito

Artículo ------ hasMany ----> Categoría

¿Cómo puedo encontrar todos los artículos que tengan Favourite.member_id = ''8'' y Category.item_category_id = ''1''

Aquí está mi relación de modelo de artículo:

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'', ) );

Utilicé esta consulta () y está bien:

$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"));

Pero no me gusta usar query (), y lo cambio a find (), y parece que no es bueno:

$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)));


Necesita llamar al Behaivor contable en su modelo

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

en tu controlador puedes hacer la consulta

$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);

prueba usando 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);


También puedes probar algo como esto:

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

Lo cual tiene el mismo efecto que volver a vincular el modelo con la condición.

Solo un posible problema. Lo anterior agregará la condición para el resto de la solicitud, si desea deshacer el comportamiento anterior, debe deshacer la condición:

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

Recuerde establecer la propiedad $ this-> Item-> recursive en el valor deseado ( atributo recursivo ). El valor predeterminado es 1, que es el mínimo que necesita para que esto funcione.