📅  最后修改于: 2023-12-03 15:02:36.290000             🧑  作者: Mango
在 Laravel 框架中,我们可以使用 Eloquent 模型来执行数据库操作。其中,填充(Filling)操作是指将数据数组填充到模型中的属性上,然后将这些属性持久化到数据库中。Laravel 允许所有可填充,这意味着我们可以让所有的属性都可被填充,而不必显式地指定哪些属性可以被填充。
Laravel 允许所有可填充的方法非常简单,我们只需要在模型中添加 $guarded
属性即可。例如:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $guarded = [];
}
在这个例子中,我们定义了一个 User
模型,并将 $guarded
属性设置为空数组。这意味着,所有的属性都可以被填充并写入到数据库中。
$guarded
和 $fillable
的区别除了 $guarded
属性外,我们还可以使用 $fillable
属性来指定可填充的属性。这两个属性的区别在于:
$fillable
属性用于指定可被填充的属性名称列表。$guarded
属性用于指定不可被填充的属性名称列表。如果 $guarded
属性为空数组,则所有的属性都可以被填充。这里我们需要注意一点,即这两个属性不能同时在同一个模型中使用。如果你在一个模型中同时定义了 $fillable
和 $guarded
属性,则会抛出 MassAssignmentException
异常。
虽然 Laravel 允许所有可填充,但我们依然需要注意安全性。特别是在处理用户提交的表单数据时,我们需要避免过度填充(Overfilling)现象的发生。过度填充发生时,黑客可以通过提交恶意数据来覆盖掉我们不希望被覆盖的属性。
为了避免过度填充的发生,我们可以使用模型中的 $fillable
属性。在 $fillable
属性中,我们只需要填写我们允许用户填写的属性名称即可。例如:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
}
在这个例子中,我们指定了 name
、email
和 password
三个属性可以被填充。如果用户在表单中提交了其他多余的属性,则不会被写入到数据库中。
在 Laravel 框架中,我们可以使用 $guarded
属性来允许所有可填充。这样做非常方便,但也需要注意安全性。我们还可以使用 $fillable
属性来指定可被填充的属性名称列表。这两个属性不能同时在同一个模型中使用。为了防止过度填充的发生,我们应该在 $fillable
属性中仅填写允许用户填写的属性名称。