Laravel 删除查询生成器

Posted

技术标签:

【中文标题】Laravel 删除查询生成器【英文标题】:Laravel Delete Query Builder 【发布时间】:2014-05-08 12:18:19 【问题描述】:

在 Laravel 4 Illuminate\Database\Query 中的 Builderdelete 函数接受 null 作为 id 参数。这个函数的行为意味着如果我有类似的东西:

DB::table('users')->where('id', $id)->delete();

如果$id 将作为null 传递,它将截断整个表。这意味着除了标准验证之外,我还必须使用! is_null($id) 验证来包装每个删除语句。这是安全漏洞还是被视为标准做法?

【问题讨论】:

同样的语句也适用于 laravel 5.4 版 【参考方案1】:

我认为您误解了该参数的用途。对于您展示的示例,它只是一个快捷方式。如果您有用户 ID,则无需编写 where 子句即可将其删除。

DB::table('users')->delete($id);

以上与此相同:

DB::table('users')->where('id', $id)->delete();

显然,在使用任何这些方法之前,您都需要进行检查,以确保提供了有效的 ID。我不会说这是安全漏洞,只是作为开发人员在开发应用程序时需要注意的事情。您不会在没有首先验证输入的情况下随意删除内容。

【讨论】:

@Jason,感谢您的出色解决方案,但如果主键的名称与 id 不同,如何使用 DB::table('users')->delete($id);在这种情况下? @SachinVairagi 在你的模型中添加这一行:protected $primaryKey = 'my_column'; 在 my_column 中,添加作为主键的列名

以上是关于Laravel 删除查询生成器的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.4 的查询生成器中添加 lists() 方法

如何在 laravel 8 的查询生成器中使用嵌套函数 substr()、cast() 和 Max()?

Laravel 查询构建器:如何访问 JSON 键/值对

laravel 查询生成器查询有啥问题?

Laravel 查询生成器 从子查询中选择

laravel,查询生成器,(或)查询未按预期工作