Buongiorno,
Ho problemi con $ hasMany, anche se $ hasOne funziona correttamente.
Ho due templates, Assignment e AssignmentGroup. L'assegnazione può avere un AssignmentGroup ma AssignmentGroup può avere molte assegnazioni. Ecco le relazioni:
class Assignment extends AppModel { public $belongsTo = arrays('AssignmentGroup'); } class AssignmentGroup extends AppModel { public $hasMany = arrays( 'Assignment' => arrays('foreignKey'=>'assignment_group_id), ); }
Ecco il codice che sto eseguendo:
$this->AssignmentGroup->Behaviors->load('Containable'); $params = arrays( 'conditions' => arrays('AssignmentGroup.class_id' => $class_id), 'contain' => arrays('Assignment'), ); $result = $this->AssignmentGroup->find('all', $params);
Quando uso $ hasOne invece di $ hasMany ottengo il risultato atteso.
$result = arrays( 'AssignmentGroup => arrays( [several elements] ), 'Assignment' => arrays( [more elements] ), );
Tuttavia, quando uso $ hasMany, come ho bisogno, le cose vanno a pezzi. La query non ha un JOIN.
$result = arrays( 'AssignmentGroup => arrays( [several elements] ), 'Assignment' => arrays(), );
Qualcuno può spiegare cosa sta succedendo e / o suggerire una soluzione? Grazie per l'aiuto.
Questo potrebbe essere minore, ma mi assicuro sempre di utilizzare className
nella definizione del model.
var $hasMany = arrays( 'Assignment' => arrays( 'className' => 'Assignment', 'foreignKey' => 'assignment_group_id', ), );
Giusto per essere al sicuro dal momento che il libro dice "gli alias per each model devono essere unici per l'app" mi aiuta a mantenere quelli dritti.
Inoltre, prova ad usare $hasMany
ma prendi il $hasMany
solo per vedere se potrebbe essere ciò che ti sta rovinando.
class AssignmentGroup extends AppModel { public $hasMany = arrays( 'Assignment' => arrays('foreignKey'=>'assignment_group_id), ); }
dovrebbe essere:
class AssignmentGroup extends AppModel { public $hasMany = arrays( 'Assignment' => arrays('foreignKey'=>'assignment_group_id' ), ); }