为我的网站开发概念模型问题
我想讨论一个与代码无关的问题。相反,这是概念或数据模型本身的问题。为我的网站开发概念模型问题
我正在使用Laravel建立企业目录网站。
我做了一个packages
表,为后端实现了包的CRUD功能,并实现了一个包列表和前端的注册按钮。当按下注册按钮时,包ID将被传递到注册路线。
我已将package_id
添加为users
表的外键。但是我现在的问题是,如果用户直接进入注册路线,那么没有包ID。因此,我想签署一个免费套餐。
由于动态包,我不能使用LIKE
查询,并且可以更改名称和ID以及免费包被删除并再次添加以及如何在删除免费包时处理异常。
请帮助我更好的方法。
当您从注册路径发布用户数据时,请检查包ID是否存在,然后正确使用,否则将获取您的免费包的包ID,然后使用它来用包ID对其进行注册。
这就像说用户无法在没有包ID的情况下注册,但是在注册时直接获取包ID。当你回发你不会得到包ID或无论你在回发或ajax注册形式获得null或0。用它来检查它是否有一个有效的包ID,如果没有,那么如果它没有获得你的免费包的ID(你可以使用任何SQL从包表中获取它,一旦你有了免费包的ID,然后开始注册用户和将该ID插入数据库,它不会抱怨)。通过这种方式,您可以在两种情况下都无法传递包ID或有人试图发送错误的包ID。
至于你说的使用文本搜索匹配的记录是一个不好的做法,也有很多的方法,正确处理这个问题:
- 添加一个布尔字段
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.
}
}
wao!这是定义问题的好办法。我了解结构。谢谢#Plokko –
你是如何处理的其他包的缺失? – fubar