gpt4 book ai didi

php - 扩展/覆盖 Eloquent 创建方法 - 不能使静态方法非静态

转载 作者:可可西里 更新时间:2023-11-01 13:02:43 26 4
gpt4 key购买 nike

我正在覆盖 create() Eloquent 方法,但是当我尝试调用它时,我得到 Cannot make static method Illuminate\\Database\\Eloquent\\Model::create () 类 MyModel 中的非静态

我这样调用 create() 方法:

$f = new MyModel();
$f->create([
'post_type_id' => 1,
'to_user_id' => Input::get('toUser'),
'from_user_id' => 10,
'message' => Input::get('message')
]);

MyModel 类中我有这个:

public function create($data) {
if (!Namespace\Auth::isAuthed())
throw new Exception("You can not create a post as a guest.");

parent::create($data);
}

为什么这行不通?我应该更改什么才能使其正常工作?

最佳答案

正如错误所述:方法 Illuminate\Database\Eloquent\Model::create() 是静态的,不能被重写为非静态的。

所以实现为

class MyModel extends Model
{
public static function create($data)
{
// ....
}
}

并通过MyModel::create([...]);调用它

您可能还会重新考虑 auth-check-logic 是否真的是 Model 的一部分,或者更好地将它移至 Controller 或 Routing 部分。

更新

此方法从 5.4.* 版本开始不起作用,而是遵循 this answer .

public static function create(array $attributes = [])
{
$model = static::query()->create($attributes);

// ...

return $model;
}

关于php - 扩展/覆盖 Eloquent 创建方法 - 不能使静态方法非静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19404030/

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