覆盖基本Laravel模型create方法时,应用程序失败。没有错误发送回浏览器,服务器日志为空。奇怪的是,没有覆盖它就可以正常工作。不确定我做错了什么。
简化的控制器功能:
public function save(Request $request, $id = 0) {
$myModel = MyModel::find($id);
$data = $request->all();
if (!$myModel) // Create a new row
{
$myModel = MyModel::create($data);
}
// ...
}
这个工作正常,直到我将此函数添加到模型中:
class MyModel extends Model
{
// ...
public static function create($attributes = [])
{
return parent::create($attributes);
}
// ...
}
只是为了澄清,我不是在寻找一种不同的方式来实现这一点。我只需要知道为什么父母的电话失败了。
这里有一些服务器信息...
答案 0 :(得分:3)
解释是公共静态函数create()未在Illuminate\Database\Eloquent\Model
类中定义。
作为 dinamic 方法调用处理,即通过调用函数来处理:
public static function __callStatic($method, $parameters)
在Illuminate\Database\Eloquent\Model
班。
最后,create()
类中定义了Illuminate\Database\Query\Builder
函数。
这就是你无法在模型中覆盖它并调用parent :: create()
恕我直言,我没有完全测试,你可以尝试:
public static function create($attributes)
{
return (new static)->newQuery()->create($attributes);
}
答案 1 :(得分:0)
关于错误,您应该确保已在服务器上启用了log_errors。关于错误,当你扩展类并想要覆盖方法时,它应该具有相同的签名,所以它应该是:
public static function create(array $attributes = [])
{
return parent::create($attributes);
}
(注意array
类型提示)。显然我假设你要在这个函数中添加更多内容:)