我有3个模型:Client,Task和Taskstatus(用于匹配每个客户的任务) Model_Task
protected static $_properties = array(
'id',
'name',
'created_at',
'updated_at',
);
Model_Client
protected static $_properties = array(
'id',
'name',
'created_at',
'updated_at',
);
Model_Taskstatus
protected static $_properties = array(
'id',
'client',
'task',
'created_at',
'updated_at',
);
我已将以下内容添加到Model_Task
protected static $_has_many = array(
'taskstatuses' => array(
'key_from' => 'id',
'model_to' => 'Model_Taskstatus',
'key_to' => 'task',
'cascade_save' => true,
'cascade_delete' => false,
)
);
Model_Client
protected static $_has_many = array(
'taskstatuses' => array(
'key_from' => 'id',
'model_to' => 'Model_Taskstatus',
'key_to' => 'client',
'cascade_save' => true,
'cascade_delete' => false,
)
);
Model_Taskstatus
protected static $_belongs_to = array(
'client' => array(
'key_from' => 'client',
'model_to' => 'Model_Client',
'key_to' => 'id',
'cascade_save' => true,
'cascade_delete' => false,
),
'task' => array(
'key_from' => 'task',
'model_to' => 'Model_Task',
'key_to' => 'id',
'cascade_save' => true,
'cascade_delete' => false,
)
);
我希望taskstatus将客户端字段链接到客户端模型,将任务字段链接到任务模型,如果用户插入的值不是客户端或任务模型(通过id),则应该出现错误。但它不起作用(我仍然可以在clientstatus中添加客户端ID和任务表中客户端和任务表中不存在的id的值。
答案 0 :(得分:1)
如果您坚持使用Model convention,以下情况就可以了:
class Model_Task extends \Orm\Model
{
protected static $_belongs_to = array(
'client'
);
protected static $_properties = array(
'id',
'name',
'client_id',
'created_at',
'updated_at'
);
}
class Model_Client extends \Orm\Model
{
protected static $_has_many = array(
'task'
);
protected static $_properties = array(
'id',
'name',
'created_at',
'updated_at'
);
}
要获得客户的任务,您只需要执行以下操作:
$client = Model_Client::find(1);
foreach($client->task as $task)
{
/* do something with each $task */
}
修改强> 这样您就可以避免在Client / Task之间使用不必要的表/模型,从而迫使您向现有客户端添加有效任务。此外,如果您希望客户端/任务之间存在一对多关系,则使用Model_Taskstatus可以将相同的任务分配给不同的客户端,这不是您想要的。
您应该查看Has Many文档。