[英]Create one to many relation in FuelPHP
我有3个模型:客户端,任务和任务状态(用于每个客户端的匹配任务)。
模型任务
protected static $_properties = array(
'id',
'name',
'created_at',
'updated_at',
);
型号客户
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,
)
);
型号客户
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中添加client和task表中不存在的client id和task id的值。
如果您坚持使用Model约定 ,那么下面的方法就可以了:
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 */
}
编辑:这样可以避免在客户端/任务之间使用不必要的表/模型,从而迫使您将有效任务添加到现有客户端。 此外,如果您希望客户端/任务之间存在一对多的关系,则使用Model_Taskstatus将允许您将同一任务分配给不同的客户端,而这不是您想要的。
您应该检查“ 有很多”文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.