gpt4 book ai didi

laravel-5 - 为我的网站开发概念模型时遇到的问题

转载 作者:行者123 更新时间:2023-12-03 06:59:19 25 4
gpt4 key购买 nike

我想讨论一个与代码无关的问题。相反,这是概念或数据模型本身的问题。

我正在使用 Laravel 构建一个企业目录网站。

我制作了一个 packages 表,为后端实现了包 CRUD 功能,并为前端实现了一个包列表和注册按钮。当按下注册按钮时,程序包 ID 会传递到注册路由。

我已将 package_id 添加为 users 表的外键。但我现在遇到的问题是,如果用户直接进入注册路线,则没有包 ID。因此,我想为用户注册一个免费套餐。

由于动态包,我无法使用 LIKE 查询,如果删除并再次添加免费包,也可以更改名称和 ID,以及如果删除免费包,如何处理异常.

请帮助我找到更好的方法。

最佳答案

正如您所说,使用文本搜索来匹配记录是一种不好的做法,有很多方法可以正确解决该问题:

  1. 添加 bool 字段is_free;如果要使其唯一,请使其可为空、唯一且默认为 null,但请记住,对于非免费,该值应为 null,对于唯一的免费包,该值应为 true,否则唯一约束将失败(该字段支持多个 null 项,但仅支持一个)是真是假)
  2. 获取第一个价格为零的包裹
  3. 为 package_groups 创建外键并创建一个“自由”组,如果您不需要将包分成组,则有点过于复杂

假设您的软件包注册路径是

/sign-up/{package_id?}

注意“?”在package_id后面,它告诉参数可能丢失。

如果我理解正确的话,逻辑是:

  • 如果指定了 package_id,则登录具有该 ID 的包
  • 如果 package_id 为空,请注册免费套餐

路线应该是这样的:

Route::get('/sing-up/{package_id?}', 'PackageController@signUp');

Controller 应该做这样的事情:

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::free()是过滤免费包的作用域,示例:

Package extends model{
//....
function scopeFree($query){
return $query->where('is_free',true); //for option 1.
}
}

关于laravel-5 - 为我的网站开发概念模型时遇到的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46130268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com