我无法使用hasMany到(Join Model)关联获取关联的Model数据。 我正在使用cakephp 2.2.3 在cakephp 1.3中,同样的发现是可以的,所以我不知道发生了什么事......
事件hasMany ScoresToEvent。 分数有多个ScoresToEvent。 ScoresToEvent属于事件和分数。
ScoresToEvent将有其他信息,因此我无法使用HATBM。
一些代码:
event.php
class Event extends AppModel{
public $name='Event';
public $hasMany=array('ScoresToEvent');
public $belongsTo=array('Entity');
public $actsAs=array('containable');
}
score.php
class Score extends AppModel{
public $name='Score';
public $hasMany=array('ScoresToEvent');
public $belongsTo=array('Entity');
}
scores_to_event.php
class ScoresToEvent extends AppModel{
public $name='ScoresToEvent';
public $belongsTo=array('Event','Score');
}
当我检索数据时,我得到这些结果:
$this->Event->ScoresToEvent->find('all', array('recursive'=>2))
array(
(int) 0 => array(
'ScoresToEvent' => array(
'id' => '8',
'event_id' => '7',
'score_id' => '1'
)
),
(int) 1 => array(
'ScoresToEvent' => array(
'id' => '9',
'event_id' => '7',
'score_id' => '3'
)
)
)
在这种情况下,我必须获取事件和分数数据。
如果我尝试使用containsable,则返回 Model“ScoresToEvent”与模型“Score”和此数组无关,因此它不会检索Score数据...
$this->Event->find('all', array(
'contain'=>array(
'Entity',
'ScoresToEvent'=>array('Score'=>array('Entity'))
),
'conditions'=>array('Event.id'=>7));
array(
(int) 0 => array(
'Event' => array(
'id' => '7',
'entity_id' => '17',
'start_date' => '2012-07-24',
'status' => null,
'end_date' => null
),
'Entity' => array(
'id' => '17',
'title' => 'y',
'content' => '',
'subtitle' => '',
'type' => 'Evento',
'avatar' => null,
'image' => null
),
'ScoresToEvent' => array(
(int) 0 => array(
'id' => '8',
'event_id' => '7',
'score_id' => '1'
),
(int) 1 => array(
'id' => '9',
'event_id' => '7',
'score_id' => '3'
)
)
)
)
我的错在哪里?哪部分代码错了? 我尝试了一个全新的cakephp 2.2.3安装
全部谢谢
P.S。相同的代码在cakephp 1.3中正常工作 p.p.s.不要考虑'实体'。
答案 0 :(得分:3)
我认为这是模型名称的问题。尝试将文件scores_to_event.php
重命名为ScoresToEvent.php
。
但在这种情况下,我认为这个模型的最佳名称是:ScoreEvent.php,更合适。
在尝试向您的模型中插入更多信息之后,例如:
进入ScoreEvent.php
public $belongsTo = array(
'Event' => array(
'className' => 'Event',
'foreignKey' => 'event_id'
),
'Score' => array(
'className' => 'Score',
'foreignKey' => 'score_id'
)
);