Laravel 删除查询生成器
Posted
技术标签:
【中文标题】Laravel 删除查询生成器【英文标题】:Laravel Delete Query Builder 【发布时间】:2014-05-08 12:18:19 【问题描述】:在 Laravel 4 Illuminate\Database\Query
中的 Builder
类 delete
函数接受 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() 方法