一個簡單的問題。在我的代碼中SilverStripe:如何使用get()獲取所有記錄
客戶有很多合作伙伴。如果我想獲取客戶詳細信息,並且客戶擁有多少合作伙伴。我試圖做的是,
$customer = Customer::get();
return Partners::get()->filter('CustomerID', $customer->ID);
不幸的是上面的代碼不工作對我來說,有沒有什麼簡單的方法來獲得。?
一個簡單的問題。在我的代碼中SilverStripe:如何使用get()獲取所有記錄
客戶有很多合作伙伴。如果我想獲取客戶詳細信息,並且客戶擁有多少合作伙伴。我試圖做的是,
$customer = Customer::get();
return Partners::get()->filter('CustomerID', $customer->ID);
不幸的是上面的代碼不工作對我來說,有沒有什麼簡單的方法來獲得。?
第一個問題是您需要了解::get()
如何工作。
::get()
返回一個DataList對象,即使它只找到1個項目,它仍然是一個帶有DataObject的列表,所以你需要獲取DataObject。
如果你確定它只包含1項,那麼你可以簡單地做$customer Customer::get()->First()
。
但在你的情況下,我很確定Customer::get()
將包含所有客戶。
所以它更像是$customers = Customer::get();
得到你想要的單一客戶依賴於你的代碼。
現在到您的實際問題:
return Partners::get()->filter('CustomerID', $customer->ID);
實際上是正確的,這是可行的。但有一個更好的方法來做到這一點。
SilverStripe爲關係創建'魔術'方法(has_one,has_many和many_many)。 因此,如果客戶的has_many合作伙伴,那麼:
$partners = $customer->Partners();
或模板:
<% loop $Partners %> ... <% end_if %>
閱讀更多關於SilverStripe數據模型在這裏: http://doc.silverstripe.com/framework/en/topics/datamodel
@Mifas你仍然得到錯誤因爲$ customer = Customer :: get()仍然返回一個DataList而不是一個Customer對象,就像@Zauberfisch所描述的那樣。在您調用關係方法之前,您需要確保您在單個客戶上調用它。
在這種情況下,無論是以下行會的工作(但關係「魔力」的方法@Zauberfisch指出的是首選方法)
$partners = $customer->Partners();
// OR
$partners = Partner::get()->filter('CustomerID', $customer->ID);
謝謝,現在我將我的代碼修改爲'$ customer = Customer :: get();返回HostingContract :: get() - > filter('CustomerID',$ customer-> ID);'那我現在怎麼得到記錄。 ? – Mifas
您需要將 - > first()添加到Customer :: get(),或者您仍然獲得DataList而不是DataObject。 – dizzystuff
啊,,不,不,我想要的是,我需要得到所有的客戶記錄和他們得到的合作伙伴的數量。 – Mifas
如果你有客戶之間的關係的has_many和合作夥伴,您應該能夠通過Customer :: get()獲得所有客戶;並使用ORM進行反思。
然後,您有2個選項可以訪問他們擁有的合作伙伴數量。
1)使用ORM!假設你的關係被命名爲「合作伙伴」。在您的PHP中,當您循環訪問Customer :: get()時,您可以訪問「 - > Partners() - > Count();」爲每個記錄。
foreach(Customer::get() as $customer){
echo $customer->Partners()->Count();
}
2),或者如果你只需要這在你的模板Zauberfisch提到你可以做一個模板循環thorugh您的客戶和使用點符號訪問合作伙伴的數量。
<% loop Customers %>
$Partners.Count
<% end_loop %>
感謝您的回答,現在清楚了,這是我的代碼,'$ customer = Customer :: get(); return $ customer-> Partners();'現在即時通訊出錯了? – Mifas