cakephp - method - get cake php
Condiciones mĂșltiples de CakePHP en find() con HABTM (1)
Está buscando el comportamiento Containable; p.ej
// app_model.php
var $actsAs = array(
''Containable''
);
Supongo que el usuario extiende AppModel, por lo que Containable se configurará para el niño (Usuario). Ahora, en su controlador, las condiciones para la clase relacionada se pueden colocar en la tecla ''contener'' del segundo argv de find (); p.ej
// users_controller.php
$this->User->find(''first'', array(
''conditions'' => array(''User.id'' => $userId),
''contain'' => array(
''Item'' => array(
''conditions'' => array(''Item.symbol'' => $itemSymbol)
)
)
);
Cake encontrará el usuario correspondiente y recuperará los elementos coincidentes (con el mismo user_id y el Item.Symbol especificado. Pero tenga mucho cuidado al usar ''contain'' => array () cuando no se requiera; de lo contrario, Cake recuperará todos los elementos definidos. asociaciones, que gravarán su base de datos.
Mi esquema tiene las siguientes relaciones:
User hasMany Transaction belongsTo User
Item hasMany Transaction belongsTo Item
User hasManyAndBelongsTo Item using Transaction as join table
Me gustaría devolver todos los elementos de un símbolo de artículo dado que pertenecen a una identificación de usuario determinada . Soy capaz de recuperar todos los elementos que pertenecen al usuario con
$this->User->find(''all'', array( ''conditions'' =>
array( ''User.id'' => $userId ) ) )
y puedo recuperar todos los artículos con un nombre de artículo dado con
$this->Item->find( ''all'', array( ''conditions =>
array( ''Item.symbol'' => $itemSymbol ) );
pero si trato de usar la matriz de condiciones (''Item.symbol'' => $ itemSymbol, ''User.id'' => $ userId) en $ this-> Item-> find (), $ this-> Item-> User -> find (), $ this-> User-> find (), o $ this-> User-> Item-> find (), me sale el error
SQL Error: 1054: Unknown column ''Item.id'' in ''where clause''
o
SQL Error: 1054: Unknown column ''Item.symbol'' in ''where clause''
He devorado HABTM en todas las versiones del libro de cocina y he leído decenas de publicaciones de SO / Foro al respecto, pero no he tenido suerte al formar esta consulta.
Información relevante: // asociaciones de User.php
// a user hasMany transactions
var $hasMany = array(''Transaction'' =>
array(''className'' => ''Transaction'',
''order'' => ''Transaction.created DESC'', // order by descending time of transaction
//''limit'' => ''1'', // change this if we need more, for example, if we need a user transaction history
''foreignKey'' => ''user_id'',
)
);
// a user hasAndBelongsTo items through transactions
var $hasAndBelongsToMany = array(''Item'' =>
array(''className'' => ''Item'',
''joinTable'' => ''transactions'',
''foreignKey'' => ''user_id'',
''associationForeignKey'' => ''item_id'',
''order'' => '''',
''limit'' => '''',
''unique'' => true,
''finderQuery'' => '''',
''deleteQuery'' => '''',
)
);
// asociaciones de Item.php
var $hasMany = array(''Transaction'' =>
array(''className'' => ''Transaction'',
''order'' => ''Transaction.created DESC'',
//''limit'' => ''1'', // change this if we need more, for example, if we need a item transaction history
''foreignKey'' => ''item_id'',
)
);
// a item hasAndBelongsTo users through transactions
var $hasAndBelongsToMany = array(''User'' =>
array(''className'' => ''User'',
''joinTable'' => ''transactions'',
''foreignKey'' => ''item_id'',
''associationForeignKey'' => ''user_id'',
''order'' => '''',
''limit'' => '''',
''unique'' => true,
''finderQuery'' => '''',
''deleteQuery'' => '''',
)
);
// Asociaciones de Transaction.php:
var $belongsTo = array(''User'', ''Item'');