如何摆脱拉拉维尔的"Does not have a default value"?



我有一个错误:

doesnt have a default value (SQL: insert into `news` (`updated_at`, `created_at`) values (2021-02-09 18:45:57, 2021-02-09 18:45:57))

我读到,当您尝试插入NULL值时出现此错误,但对我来说最奇怪的部分是,尽管有错误,它仍然将此数据保存在DB中(具有正确的创建,更新字段)。下面是controller中的代码:

public function addArticle(Request $request)
{
$data = $request->json()->all();
$news = new News;
$news->insert([
'title' => $data['title'],
'content' => $data['content'],
'photo' => $data['photo'],
'author' => 1,
"created_at"=> now(),
"updated_at"=> now(),
]);
$news->save();
}

您正在尝试使用雄辩模型"News"在数据库中创建一个新对象。在$news = new News;行中,您实例化了一个对象,而不向构造函数传递参数。然后尝试插入该数据。我猜异常发生在第4行。

试试这样

$news = new AppModelsNews([
'title' => $data['title'],
'content' => $data['content'],
'photo' => $data['photo'],
'author' => 1,
"created_at"=> now(),
"updated_at"=> now(),
]);
$news->save();

$isCreated = AppModelsNews::create([
'title' => $data['title'],
'content' => $data['content'],
'photo' => $data['photo'],
'author' => 1,
"created_at"=> now(),
"updated_at"=> now(),
]);
public function addArticle(Request $request)
{
$data = $request->json()->all();
$news = new News;
$news->insert([
'title' => $data['title'],
'content' => $data['content'],
'photo' => $data['photo'],
'author' => 1,
"created_at"=> now(),
"updated_at"=> now(),
]);
$news->save();
}

看看你的代码,我可以发现你在两个实例中保存数据。首先,使用insert()方法接受负载并将数据插入到表中。这一步没有例外。

当您调用$news->save()

时,会引发异常,因为save试图存储未填充属性的$news对象,因此试图保存一个空白对象。这是抛出异常。

如果您正在使用保存,您只需要填充属性,其余的都将由保存完成。保存eloquent对象还可以帮助您创建和更新set to now()。

我将更新此代码如下:

  • 创建可填充的新闻模型(如果字段被正确映射)

    protected $fillable = ['title', 'content', 'photo', 'author'];
    
  • 将在addArticle中使用质量分配。

    public function addArticle(Request $request)
    {
    $data = $request->only('title', 'content', 'photo', 'author);
    //update author if source of data is other than request payload
    $data['author'] = 1
    $news = News::create($data);        
    // return response as required. 
    }
    

相关内容

最新更新