至於你說的使用文本搜索匹配的記錄是一個不好的做法,也有很多的方法,正確處理這個問題:
- 添加一個布爾字段
is_free
; 如果你想使它唯一使其可爲空,唯一和默認爲空,但記住對於唯一的免費軟件包,值應該爲非空或真,否則唯一約束將失敗(該字段支持多個空項目一個是true或false)
- 獲取價格等於零的第一個包
- 爲package_groups創建一個外鍵並創建一個「空閒」組,如果您不需要將包分成組
讓我們假設你的軟件包的註冊途徑是
/sign-up/{package_id?}
注意「?」在package_id之後,它告訴參數可能會丟失。
邏輯如果我理解它正確是:
- 如果的package_id指定登錄爲包與ID
- 如果的package_id是空註冊一個免費包
路線應該是這樣的:
Route::get('/sing-up/{package_id?}', '[email protected]');
而且控制器應做這樣的事情:
PackageController extends Controller{
//....
public signUp($id=null){
$package=($id==null)?Package::free()->first():Package::findOrFail();
//If $package is null there are currently no active free packages
///sign-up logic here...
}
}
假設套票:免費()時,其過濾無鉛封裝,一個示例的範圍:
Package extends model{
//....
function scopeFree($query){
return $query->where('is_free',true); //for option 1.
}
}
你是如何處理的其他包的缺失? – fubar