2014-11-21 60 views
1

ERD example http://i57.tinypic.com/zn367d.png爾康模型,並與多個外鍵

你可以從這個ERD見表屬性,我設計的是跟蹤多個類型的用戶的行爲的記錄器。 在實例中,logger.log表中的每條記錄在相關的logger.relate。*表之一中只有一條相關記錄。

使用爾康模型作爲一個獨立的,我有7個型號,一個是主表和6的關係表:

  • 登錄
  • LogRelateCarrier
  • ...

在Log模型類中,我使用hasMany()方法設置1-n關係;在其他模型類中,我使用用於n-1關係的belongsTo()方法。

我的問題: 是那裏爾康直接處理的情況類似這樣的方式,讓我能夠得到的日誌記錄演員的ID只是做類似:

$log  = Log::findFirst(1); 
$id_actor = $log->getIdActor(); // Getter method for actor's ID 
$actor_type = $log->getActorType(); // Getter method for actor's type (customer, carrier, etc.) 

有在干將很簡單,像(原諒我,我真的很新的這個框架):

public function getIdActor() { 
    return $this->id_actor; 
} 

換句話說,我想知道是否有在這個框架的方式來處理這種情況下不必須編寫自己的其他選擇例程。並且,只要有可能,就會有一些性能(因爲我在logger.log類中保存了actor的類型以知道哪個關係表需要查詢,而不是查詢所有關係表,然後只計算一條記錄一個唯一的表格)。

最後,我確實使用了很多關係表,因爲我需要數據層(而不是邏輯之一)來執行日誌表和許多不同參與者外部表之間的約束。

希望我解釋一下情況,非常感謝!

回答

0

EIDT: 終於明白了什麼意思,答案是否定的。 您應該使用查詢或堅持您的實際實施。我不認爲你的實際執行開銷太多。

原文: 我不太確定我是否正確理解你的問題。

你想從模型中選擇一個相關的模型? 如果是這樣,您可以使用belongsTo和hasMany創建別名。這兩種方法的最後一個參數是一個數組:

array(
    'alias' => 'yourAlias' 
) 

現在你可以使用$log->yourAlias->getIdActor();

+0

我知道相關的模型。我的「問題」是,根據相關關係表有或沒有鏈接到主表記錄的記錄,主模型的每個實例只有六個相關模型中的一個的一個實例。 因此,我通過在主模型實例屬性「type_actor」上找到第一個正確的相關模型來處理情況,從而避免在其他相關表上運行其他5個findFirst,由於前提條件,將生成空結果集。 Phalcon是否有自動處理這種情況的特定方法。 – user3418803 2014-11-23 18:03:22

+0

仍然不知道我的理解是否正確..讓我們繼續嘗試:) 您可以在log-Model中創建一個方法,在actor_type上實現開關,然後返回通過關係連接的適當模型。 希望可以幫助:) – Celoain 2014-11-23 19:05:41

+0

通過你的回答,你得到了這個場景。你解釋的是我實施的實際解決方案。它實際上執行兩個單獨的查詢:一個用於Log模型,另一個用於適當的相關模型。我可以通過一個外部連接使用查詢獲得同一日期,但想知道是否可以讓Phalcon在這樣的概念高層次上執行這樣的操作:) – user3418803 2014-11-23 20:33:23