2012-12-09 45 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'。 –

相關問題