2016-11-29 48 views
2

我在Laravel 5Laravel:強制執行一對一的關係

創建一個應用程序,我創建的應用程序是一個招聘網站,其中一個候選人必須填寫許多形式。由於有很多字段,我決定從邏輯上將users表分成一對一關係的許多較小的表。

例如兩個這樣的表可能是這樣的:

用戶

  • ID
  • 角色(如管理員或候選人)
  • FIRST_NAME
  • DOB

driving_licences

  • ID
  • USER_ID(FK到用戶)
  • has_licence
  • NUMBER_OF_POINTS
  • licence_number

在上述簡單的情況下,usersdriving_licences一對一的關係。換句話說,每個User模型必須有一個對應的DrivingLicence模型。

創建上述表格和相應的Eloquent模型非常簡單。然而,我正在努力實施每個用戶(或每個候選用戶)都有相應的DrivingLicence的最佳方法。

該解決方案目前我已經是,每當我用的東西從我DrivingLicence首先檢查是否存在這種關係,並創建它,如果它不喜歡這樣:

if ($user->drivingLicence === null) { 
    $drivingLicence = new DrivingLicence(); 
    $drivingLicence->user_id = $user->id; 
    $drivingLicence->save(); 
} 

這做每次我需要用DrivingLicence做點什麼,這當然會造成很多重複。

因此,我的問題是,我該如何執行Laravel中的usersdriving_licences之間的一對一關係。

+0

這可能不會是最好的方法,但可以讓你走上正確的軌道:在你的'用戶'模型中創建一個函數來檢查許可證是否爲空。如果是,則爲用戶創建並保存新的許可證。 '$用戶> checkLicense()'。在'checkLicense()'中檢查'null',創建或獲取許可證,然後返回許可證。清楚的是,這減少了不斷重寫許可證檢查並將其移至模型中的函數的需要。 –

+0

此外,「強制執行」所需許可證的想法是在用戶創建時創建一個空的許可證,以便在用戶保存時進行保存。然後,您可以填寫正確的數據。您不再需要檢查許可證是否存在,因爲您在創建用戶時已創建許可證。 –

回答

0

我認爲迫使用戶獲得許可證是首要的錯誤目標。用戶完全有可能沒有駕駛執照,而不是使用has_license字段來表示,只是不要爲他們創建駕駛執照。

在現實世界的場景中思考它。沒有駕駛執照的人也沒有卡片,說他們沒有執照。這基本上是你用當前數據庫模式建模的東西。相反,他們只是沒有任何東西,所以省略了driving_licenses記錄。

然後你User模型可以有一個方法,如hasDrivingLicense()與下面的實現:

public function hasDrivingLicense() 
{ 
    return $this->drivingLicense !== null; 
} 

我知道這不會回答你直接的問題,但是這站出來給我一個位的代碼聞。

+1

確定是這個例子。但對於其他一些表格,比如'next_of_kin'或'documents',這很重要。 –