簡體   English   中英

我該如何處理相關模型在cakephp中添加操作?

[英]How do I handle a related models add action in cakephp?

我有兩個模型, DealerDealerReview
我想創建一個表單以從DealersController的View操作添加DealerReview。 在cakephp中實現此目標的推薦方法是什么? 我是否:

a)在DealersController視圖操作中創建一個表單,但是將數據發布到DealerReviewsController添加操作? 要么

b)將添加的評論數據直接發布到DealersController ,查看操作並將記錄從那里添加到數據庫?

真的取決於你...

選擇一種或另一種方式時,您要牢記的是:

為一個)
-與評論相關的經銷商將已經創建? 如果不是,您如何將外鍵Dealer_id添加到DealerReviews中以將兩者關聯?

對於b)
-如果沒有創建經銷商,這將消除沒有合適的外鍵的麻煩(當然,如果首先添加經銷商的創建)
-如果您打算從其他地方添加評論,則不能重復使用添加DealerReviews邏輯。

我通常要做的只是將數據直接發布到主控制器(在本例中為Dealers)。 省去了在添加評論之前必須檢查經銷商是否正確保存和驗證的麻煩。

如果在保存Review之前要考慮業務邏輯(例如只能在凌晨2點到凌晨3點之間保存(我知道這是愚蠢的示例)),那么我可以在beforeSave添加該驗證。

如果它是一次或兩次的業務邏輯,則在模型中創建一個新函數saveButOnlyInSomeCasesLogic($reviewArray)並讓其處理這些情況,控制器只需調用該函數並等待結果即可。

總結:選擇需要時可以重用代碼的選項。 如果您將始終具有外鍵,請在“評論”控制器中進行操作,則可能需要重用add操作。 如果您絕對不會重復使用添加操作或在保存時沒有可用的外鍵,請在Dealers中將其保存到模型中,如果有的話,請保留在模型中。

使用您的關聯保存此內容。 您可以說一個經銷商有很多經銷商評論。 因此,在這種情況下,我只是從您的DealersController視圖中調用保存。

$this->Dealer->DealerReview->save($this->request->data);

這樣,您的表單就可以像您想要的那樣放在DealersController中。

我要補充,取決於具體的用例。

原因如下:

如果審閱表單包含多個字段(但即使審閱只有一個文本區域,則至少需要驗證用戶是否提交了空的審閱)。 如果是這樣,則在出現錯誤時,您需要返回相同的表單(預先填充所發布的數據),最后返回同一頁面。 因此,以相同的操作發布表單將充當普通的添加或編輯表單。

或者,如果您使用的是ajax表單提交,那么我將使用DealersController:add()方法,該調用將在原始表單的位置進行響應,但是這次存在驗證錯誤。 這需要一些調整,因為您需要檢測調用是否來自ajax,因此您無需將add操作重定向到索引。 這里最大的好處是用戶不需要刷新頁面。

因此,如果您不使用ajax,我會說-在DealersController :: view()中發布,但是如果您使用ajax,則使用DealersReviewsController :: add()會更加有用,並且您將重用方法以及用戶不必刷新頁面。

正如@Nunser所說-由您決定。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM