我正在使用 laravel 5.8,但无法将数据插入 mysql 数据库

I am using laravel 5.8, and I cannot insert data to mysql database

我正在使用 laravel 5.8 并学习 CRUD。我有 2 个 table,用户 table 和地址 table。我想将 user_id 连接到

地址 table。但是我的代码不起作用。我无法插入数据。

我已经迁移了 2 table,并且我可以添加列。 我插入了一个用户的数据。所以table有一个用户的信息。

我在本地服务器中使用 MAMP 和 mysql 服务器。

1.App/Address.php

protected $fillable = [
     'name'
];//

2.App/User.php

public function address(){
    return $this->hasOne('App\Address', 'foreign_key');
}

3.Userstable

Schema::create('users', function (Blueprint $table) {
        $table->Increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

4.Addresses table

Schema::create('addresses', function (Blueprint $table) {
        $table->Increments('id');
        $table->integer('user_id')->unsigned()->nullable();
        $table->string('name');
        //$table->timestamps();
    });

5.routes/web.php

use App\User;
use App\Address;
Route::get('/', function () {
return view('welcome');
});

Route::get('/insert', function(){
$user = User::findOrFail(1);
$address = new Addresses(['name'=>'1234 Houston av NY NY 234']);
$user->address()->save($address);
});

日志文件中没有显示任何内容,所以我不明白为什么它不起作用。

在你的Addressestable,

Schema::create('addresses', function (Blueprint $table) {
        $table->Increments('id');
        $table->integer('user_id')->unsigned()->nullable();
        $table->string('name');
        //$table->timestamps();

        // define foreign key like this
        $table->foreign('user_id')
              ->references('id')->on('users')
              ->onDelete('cascade');
});

更新您的 routes/web.php 如下所示,

Route::get('/insert', function(){
    $user = User::findOrFail(1);
    $address = new Addresses();
    $address->name = '1234 Houston av NY NY 234';
    $address->user_id = $user->id;
    $address->save();
});

您的用户模型中的关系无效。您应该更正此问题以使用该关系。

2.App/User.php

public function address(){
    return $this->hasOne('App\Address', 'user_id','id');
}

将您的地址分配给用户的另一种方法(替代方法,只是一个提示):

$address = new Addresses(['name'=>'1234 Houston av NY NY 234', 'user_id',$user->id]);
$adresss->save();

我认为您还应该将关系添加到您的数据库迁移中。在你的代码中你没有。

4.Addresses table

Schema::create('addresses', function (Blueprint $table) {
        $table->Increments('id');
        $table->integer('user_id')->unsigned()->nullable();
        $table->string('name');

        $table->foreign('user_id')->references('id')->on('user'); // this line is the forgein key.
    });

这里我添加了一步步向数据库插入数据的代码

创建迁移以创建 post table

php artisan make:migration create_post_table --create=post

在迁移中添加标题和内容栏

public function up()
    {
        Schema::create('post', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->longText('content');
            $table->timestamps();
        });
    }

在视图目录下创建post文件夹 在 post 文件夹中创建 blade 文件 create.blade.php

<form method="POST" action="{{ route('post.store') }}">
    @csrf

   Title:  <input type="text" name="title" placeholder="Title" required>

   <br>

    Content: <textarea name="content" placeholder="Content" required></textarea>

    <button type="submit">Save</button>

</form>

创建控制器

php artisan make:controller PostController --resource

控制器中的代码

use App\Post;

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

    public function store(Request $request)
    {
        $request->validate([
            'title' => 'required',
            'content' => 'required',
        ]);

        $post = $request->all();

        Post::create($post);

        return redirect('/post');
    }

在路由文件中 (web.php)

//routes for post
Route::resource('post', 'PostController');

打开post表格

http://example.test/post/create 

输入标题和内容并点击保存按钮