2012-12-09 124 views
0

我有3个模型:客户端,任务和任务状态(用于为每个客户端匹配任务)。
Model_Task在FuelPHP中创建一对多关系

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_客户

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),应该会出现错误。但它不起作用(我仍然可以向客户端添加客户端ID和任务ID在客户端和任务表中不存在的值的值

+0

什么不行? “不起作用”不是错误信息!描述你在做什么以及你想要发生什么。 – markus

+0

我希望taskstatus中的客户端和任务字段必须链接到客户端和任务模型中的id字段。我刚刚添加了2个客户端和2个任务。例如,如果我插入值为client = 40且task = 13的taskstatus,则会发生错误,告诉我我无法做到这一点。但实际上我仍然可以插入客户端和任务值> 2的taskstatus,这是我不期望的。 –

回答

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 */ 
} 

编辑: 这样你可以避免客户端/任务之间的不必要的表/模型,迫使您将有效任务添加到现有客户端。此外,如果你想要一个一对多客户端/任务之间的关系,使用Model_Taskstatus将允许您将相同的任务分配给不同的客户端,而这不是你想要的。

您应该检查Has Many文档。

+0

其实我有一个适用于所有客户的标准清单。因此,我必须跟进1个客户,完成哪些任务,哪些没有完成。因此我认为这种关系不在Client和Task之间,而是Client/Task和taskstatus。我检查了许多文档,但不明白“建立和打破多种关系”(它应该放在哪里 - 控制器,模型?用什么方法?在Model_Comment :: find中找到6是什么意思(6)“)。对不起,因为我对FuelPHP完全陌生,文档看起来不够具体。 –

+0

在我发布的'foreach()'迭代示例中,您可以检查与客户端关联的每个任务的状态。 除了Has Many文档外,您应该检查[Creating models](http://fuelphp.com/dev-docs/packages/orm/creating_models.html)和所有[ORM文档](http:// fuelphp。 com/dev-docs/packages/orm/intro.html)。 'Model_Comment :: find(6)'表示您想要获取id = 6的'Model_Comment'。 –