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

时间:2019-05-20 09:50:19

标签: php mysql laravel eloquent mamp

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

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

我已经迁移了2个表,并且能够添加列。 我插入了一个用户的数据。因此表中有一个用户的信息。

我正在本地服务器中使用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表

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);
});

日志文件上没有任何显示,因此我无法弄清为什么它不起作用。

3 个答案:

答案 0 :(得分:1)

在您的package com.xyz; import java.io.Serializable; import java.sql.*; import org.hibernate.HibernateException; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.id.IdentifierGenerator; public class IdGenerator implements IdentifierGenerator{ @Override public Serializable generate(SessionImplementor session, Object object) throws HibernateException { Connection connection = session.connection(); try { Statement statement=connection.createStatement(); ResultSet rs=statement.executeQuery("select count(Id) from dbo.TableName"); if(rs.next()) { int id=rs.getInt(1); return new Integer(id).toString(); } } catch (SQLException e) { e.printStackTrace(); } return null; } } 表中,

Addresses

按如下所示更新您的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

答案 1 :(得分:1)

用户模型中的关系无效。您应该更正此错误,以使用该关系。

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表

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.
    });

答案 2 :(得分:1)

在这里,我添加了将数据逐步插入数据库的代码

创建迁移以创建帖子表

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文件夹中创建刀片文件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');

打开帖子表格

http://example.test/post/create 

输入标题和内容,然后单击“保存”按钮