【问题标题】:I can't submit data into database in Laravel我无法将数据提交到 Laravel 中的数据库
【发布时间】:2020-07-07 23:15:45
【问题描述】:

我是 Larave 新手,使用 Laravel Framework 6.17.1。使用表单向数据库提交数据时出现此错误。贝娄是我得到的错误。

照亮\数据库\查询异常 SQLSTATE[HY000]:一般错误:1364 字段“user_id”没有默认值(SQL:插入到posts(title,updated_at,created_at)值(标题,2020-03-27 2020-03-27 07:55:06 07:55:06))

PostContolller.php

 public function create()
{
    //
    return view('posts.create');
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    //
    //return $request->all();
    Post::create($request->all());
}

表格

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('user_id')->unsigned();
        $table->string('title');
        $table->text('content');
        $table->timestamps();
    });
}

路线

Route::resource('/posts', 'PostController');

【问题讨论】:

  • 如果你dd($request->all()) 你会看到没有user_id 键。这需要提供,因为您尚未创建该列nullable。

标签: php laravel migration


【解决方案1】:

只需放入您的 Post 模型,每当您使用 create 方法时,请确保您的所有列都作为 fillable 属性放入您的模型中。

Post.php

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $table = 'posts';
    protected $fillable = ['user_id','title','content'];
}

在您的控制器中:

public function store(Request $request)
{
    $id = Auth::user()->id;
    $request['user_id'] = $id;
    Post::create($request->all());
}

【讨论】:

  • 请将此答案标记为已验证。如果对你有帮助谢谢@Ihtisham Khan
  • 请选择我的答案。
【解决方案2】:

您收到该错误的原因是 user_id 列不可为空。要解决这些问题,请确保以下几点:

1) 在 Post Model 中添加以下可填充:

protected $fillable = ['user_id', 'title', 'content'];

3) 在您的 PostController.php 中,您必须具有以下构造函数。确保只有经过身份验证的用户才能创建帖子。

 public function __construct()
{
    $this->middleware('auth');
}

2) 我假设提交表单的用户是您的应用程序中经过身份验证的用户。因此,在您拥有表单的刀片中添加以下代码行:

<input type="hidden" name="user_id" value="{{ Auth::user()->id }}">

在上面的代码中,我们传递了一个隐藏的填充,其中包含您从 Laravel Auth 外观获取的 user_id 值。

现在当您dd($request-&gt;all()); 时,您应该能够在您的数组中看到 user_id。

注意:使用质量分配时,您需要在模型上添加受保护的可填充项,并确保您在输入中使用的名称已填充与模型中的确切名称匹配。 Learn more about Laravel mass assignment

【讨论】:

    【解决方案3】:

    您没有在刀片文件的表单提交中发送 user_id,即 $request->all() 不包含 user_id

    如果user_id 不是强制性的,则在迁移文件中添加$table-&gt;integer('user_id')-&gt;unsigned()-&gt;nullable();

    【讨论】:

    • 我明白了,谢谢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多