Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho dois models associados:
Produto (id, codigo, lote_ean, valor)
public $belongsTo = array( 'Lote' => array( 'foreignKey' => 'lote_ean' ) );
Lote (id, codigo, ean, validade)
public $hasMany = array( 'Produto' => array( 'foreignKey' => 'lote_ean' ) );
Mas o cake faz a referencia Produto.lote_ean = Lote.id e claro não encontra nada.
Encontrei um post onde o cara apenas usou, no model produto:
public $belongsTo = array( 'Lote' => array( 'foreignKey' => false, 'conditions' => array( 'Produto.lote_ean = Lote.ean') );
Ok, funcionou, mas e o reverso, no lote mostrar os produtos associados, não funcionou...
Alguma ajuda?
Resolvido dessa forma:
Classe Produto:
public $belongsTo = array( 'Lote' => array( 'foreignKey' => false, 'conditions' => array( 'Produto.lote_ean = Lote.ean') );
Classe Lote:
public $hasMany = array( 'Produto' => array( 'foreignKey' => false, 'conditions' => array( 'Lote.ean' = 'Produto.lote_ean') );
>
Pq você não troca o "_ean" por "_id" na tabela Produto?
Por questões de praticidade e etc durante modelagem chegamos a conclusão que era melhor ter o ean do lote no produto.
>
Resolvido dessa forma:
Classe Produto:
public $belongsTo = array( 'Lote' => array( 'foreignKey' => false, 'conditions' => array( 'Produto.lote_ean = Lote.ean') );
Classe Lote:
public $hasMany = array( 'Produto' => array( 'foreignKey' => false, 'conditions' => array( 'Lote.ean' = 'Produto.lote_ean') );
Claro que eu tentei isso né, e não funcionou, no test eu recebo erro:
"Select ... FROM `produtos` AS `Produto` WHERE `Lote`.`ean`..."
Unexpected PHP error [<span style="color:Red;text-align:left"><b>SQL Error:</b> 1054: Unknown column 'Lote.ean' in 'where clause'</span>] severity [E_USER_WARNING] in [/var/www/sim/cake/libs/model/datasources/dbo_source.php line 684]
Ele não referencia a tabela lote nesse select, eu nem pesquisei que select é esse, mas pelo erro entendi que não é dessa forma que a estrutura do cake vai trabalhar.
Consegui resolver usando no Lote (hasMany) uma instrução em finderQuery...
Pq você não troca o "_ean" por "_id" na tabela Produto?