Я использую Laravel 5.8, и я не могу вставить данные в базу данных MySQL - PullRequest
1 голос
/ 20 мая 2019

Я использую 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. Таблица адресов

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 ]

1 голос
/ 20 мая 2019

Отношения в вашей модели пользователя недействительны. Вы должны исправить это, чтобы работать с отношением.

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. Таблица адресов

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.
    });
1 голос
/ 20 мая 2019

Здесь я добавляю код для вставки данных в базу данных шаг за шагом

Создание миграции для создания почтовой таблицы

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 

введите название и содержание и нажмите кнопку сохранения

1 голос
/ 20 мая 2019

В вашем 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, как показано ниже,

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