我使用cakephp,我对列出多个模型的想法感到困惑,下面是我的场景:
我有两个主要的模型,即任务和事件。我使用Events模型来跟踪所有更改。这更改了ff字段:id, model, model_id我使用Events表来跟踪多个模型更改。所以当一些东西改变到任务模型时,它将被记录到事件模型(明白吗??)
我想做的是每当我使用事件模型的find方法时,我想列出模型信息(例如,任务模型)以及我的事件信息,如下所示:
array(
[0] => array (
[Event] => array(
id => 1
model => Task
model_id => 2
changed => array()
)
[Task] => array(
id => 2
name => Task 1
descp => Test Task
)
)
)
注意:模型可以是任何模型,可以是Projects模型。
在我的task.php,这是没有问题的,因为我可以很容易地声明:
var $hasMany = array(
'Events' => array(
'className' => 'Events',
'foreignKey' => 'model_id',
'dependent' => false,
'conditions' => array('Events.model' => 'Task')
)
);
我可以在任务上使用find方法获得事件信息,尽管使用
$this->Task->Event->find('all');
不能工作,我不知道为什么。
所以一旦我在事件模型中声明,像这样的东西:
var $belongsTo = array(
'Task' => array(
'className' => 'Task',
'foreignKey' => 'model_id',
'conditions' => array('Event.model' => 'Task', 'Event.model_id' => 'Task.id'),
'fields' => '',
'order' => ''
)
);
将抛出SQL错误。你们知道怎么实现它吗?提前感谢。:)
我一直使用多态模型。$this->Task->Event->find('all')
不起作用的原因是您在Event
模型上执行查找,该模型在定义其belongsTo
关联之前,没有任何检索Task
信息的方法。
就目前而言,我看到的唯一奇怪的事情是,你把你的Task
关联别名为Events
(复数),而不是它的单数版本,这是模型的惯例。您还将className
标识为复数版本。