2016-11-10 109 views
2

我有兩種類型的用戶:client,manager。存儲在分開的表格中。如何區分配置文件?

然後每個都有獨特的暱稱。

所以,我需要通過nickname打開配置文件。

對於客戶端是:

$client = Client::where("nickname", $nickname) 

對於經理是:

$manager = Manager::where("nickname", $nickname) 

所以,我儘量讓這dewtect通用函數,其中爲客戶和經理並執行相應的查詢。

如何改進此代碼並僅檢測nickename用戶的類型?

+1

對我來說,更好的是對於兩種用戶類型都使用相同的表格。只需添加一列即可確定該用戶是經理還是客戶。當你檢查一個用戶時,確定他的角色取決於他對應的角色列值 – reza

+0

我與@reza,除非模型不同,你需要拆分它。 –

+0

看到了兩種解決方案,我仍然認爲它更好,在那個特定的用例中只使用2行檢查客戶端是否不檢查管理員是否返回404;將會更簡單和更好的可讀性來理解正在發生什麼 –

回答

2

您應該爲此使用一個模型,我想這將是處理客戶和管理人員的最佳方式。

如果你想使用兩種模式,您可以創建方法,並把它放在Client模式,因爲大多數查詢的將是客戶的一些原因:

public function getClientOrManagerByNickname($nickname) { 
    $client = $this->where('nickname', $nickname)->first(); 

    return is_null($client) ? (new Manager)->where('nickname', $nickname)->first() : $client; 
} 

此代碼將創建一個查詢,如果客戶端找到並將返回此客戶端。或者它會創建兩個隊列並返回經理。如果沒有此暱稱的客戶和經理,它將返回null

+0

我會建議創建一個輔助函數,或者至少是完全脫離模型的東西。我認爲有一個模型函數能夠返回一個不同的模型可能會導致很大的混淆情況。 無論如何,我認爲代碼是儘可能的方式,乾淨,簡單;) –

+0

你能分享樣本嗎? – MisterPi

+0

@UmbertP爲什麼你想從模型中分離它,如果它是100%的數據相關的功能?這裏沒有完美的解決方案(好吧,完美的解決方案是將所有數據保存在一個模型中)。您可以創建存儲庫,但是我不會僅僅爲了一個簡單的任務就做到這一點。 –

1

正如我所說,我會建議一些更復雜的東西,但對我來說,由於模型返回的混淆,不太容易犯錯誤。

我建議的東西沿着這條:

$modelname = getModelName(); $values = $modelName::where(1);

凡功能getModelName()將只返回MODELNAME。 我知道這意味着要再次通過數據庫,它會增加操作的成本,但我寧願損失一點性能,並在代碼中具有更多的一致性。

雖然這是我個人的觀點。