gpt4 book ai didi

laravel - Eloquent ORM : Define allowed model attributes

转载 作者:行者123 更新时间:2023-12-04 09:30:28 25 4
gpt4 key购买 nike

在laravel的eloquent ORM中,是否可以定义模型的允许属性?

默认情况下,我可以将任何属性放入模型的构造函数中-但是,当我实际尝试将模型保存到数据库时,我只会收到有关错误的属性名称的通知。

示例代码:

// this works although there is a typo in "lastname"
$user = new \App\User(['firstname' => 'foo', 'lastnam' => 'bar']);

// this errors out with an SQL error
$user->save();

因此,有没有办法让Laravel自动检查请求的输入数据中是否有无效的键?

最佳答案

如果您不仅要防止使用fill()方法填充不允许的属性,而且要直接设置它们(例如$model->foo = 'bar'),那么您就必须覆盖Model::setAttribute()方法。

最好在扩展Eloquent的自定义基础模型中做到这一点。因此在app/Model.php中:

namespace App;

use Exception;
use Illuminate\Database\Eloquent\Model as Eloquent;

class Model extends Eloquent
{
// this should be actually defined in each sub-model
protected $allowed = ['firstname', 'lastname'];

public function setAttribute($key, $value)
{
// this way we can allow some attributes by default
$allowed = array_merge($this->allowed, ['id']);

if (! in_array($key, $allowed)) {
throw new Exception("Not allowed attribute '$key'.");
}

return parent::setAttribute($key, $value);
}
}

然后,在不应允许无效属性的模型中,可以扩展此基本模型:
use App\Model;

class User extends Model

关于laravel - Eloquent ORM : Define allowed model attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40548434/

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