Laravel: неизвестный столбец 'te_size_id' в отношении hasManyThrough - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь создать свой собственный интернет-магазин в качестве обучения с laravel, я установил отношения hasManyThrough с моделями Item, ItemOption, ItemSize и ItemColor. Проблема возникает, когда я заполняю свою базу данных фиктивными данными, я получаю следующую ошибку:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ìtem_size_id' in 'field list' (SQL: insert into `item_options` (`item_id`, `item_color_id`, `ìtem_size_id`, `stock`) values (1, 1, 1, 10))

Это исходный файл, в котором возникает ошибка:

<?php


use Illuminate\Database\Seeder;
use Carbon\Carbon;


class ItemOptionsSeeder extends Seeder
{


    public function run()
    {
        //blancas
        DB::table('item_options')->insert([ 'item_id' => 1, 'item_color_id' => 1, 'ìtem_size_id' => 1, 'stock' => 10 ]);
        //negras
        DB::table('item_options')->insert([ 'item_id' => 1, 'item_color_id' => 2, 'ìtem_size_id' => 2, 'stock' => 10 ]);
        //rojas
        DB::table('item_options')->insert([ 'item_id' => 1, 'item_color_id' => 3, 'ìtem_size_id' => 3, 'stock' => 10 ]);
        //verdes
        DB::table('item_options')->insert([ 'item_id' => 1, 'item_color_id' => 4, 'ìtem_size_id' => 4, 'stock' => 10 ]);

    }


}

Я думаю, что я установил отношения и модели правильно, и я не могу найти то, что не так с моим кодом, давайте начнем с Мои модели, а затем миграции:

Модели:

<?php
namespace App\Models;


use Illuminate\Database\Eloquent\Model;


class Item extends Model
{


    protected $table = 'items';


    public function options()
    {
        return $this->hasMany(ItemOption::class);
    }

    public function sizes()
    {
        return $this->hasManyThrough(ItemSize::class, ItemOption::class, 'item_size_id', 'id');
    }

    public function colors()
    {
        return $this->hasManyThrough(ItemColor::class, ItemOption::class, 'item_color_id', 'id');
    }
}
<?php
namespace App\Models;


use Illuminate\Database\Eloquent\Model;


class ItemOption extends Model
{

    protected $fillable = ['item_id', 'item_color_id', 'item_size_id', 'stock'];

    public function item()
    {
        return $this->belongsTo('App\Models\Item', 'item_id');
    }

    public function color()
    {
        return $this->belongsTo('App\Models\ItemColor', 'item_color_id');
    }

    public function size()
    {
        return $this->belongsTo('App\Models\ItemSize', 'item_size_id');
    }
}
<?php
namespace App\Models;


use Illuminate\Database\Eloquent\Model;


class ItemSize extends Model
{


    protected $table = 'item_sizes';


}

<?php
namespace App\Models;


use Illuminate\Database\Eloquent\Model;


class ItemColor extends Model
{


    protected $table = 'item_colors';


}

И миграции:

<?php


use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;


class ItemOptions extends Migration
{


    public function up()
    {


        Schema::create('item_options', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('item_id')->index()->nullable();
            $table->foreign('item_id')->references('id')->on('items')->nullable();
            $table->unsignedInteger('item_size_id')->index()->nullable();
            $table->foreign('item_size_id')->references('id')->on('item_sizes')->nullable();
            $table->unsignedInteger('item_color_id')->index()->nullable();
            $table->foreign('item_color_id')->references('id')->on('item_colors')->nullable();
            $table->integer('stock');
            $table->timestamps();
        });


    }


    public function down()
    {
        DB::statement('SET FOREIGN_KEY_CHECKS = 0');
        Schema::dropIfExists('item_options');
        DB::statement('SET FOREIGN_KEY_CHECKS = 1');
    }


}

<?php


use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;


class Items extends Migration
{


    public function up()
    {


        Schema::create('items', function (Blueprint $table) {
            $table->increments('id');
            $table->string('image')->nullable();
            $table->string('title');
            $table->string('url')->unique();
            $table->string('slug')->unique();
            $table->text('body');
            $table->decimal('finalPrice', 5,2);
            $table->boolean('isVisible')->default(false);
            $table->boolean('isFeatured')->default(false);
            $table->boolean('beenPublished')->default(false);
            $table->boolean('scheduleForMail')->default(false);
            $table->timestamps();
        });


    }


    public function down()
    {
        DB::statement('SET FOREIGN_KEY_CHECKS = 0');
        Schema::dropIfExists('items');
        DB::statement('SET FOREIGN_KEY_CHECKS = 1');
    }


}

<?php


use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;


class ItemSizes extends Migration
{


    public function up()
    {


        Schema::create('item_sizes', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->timestamps();
        });


    }


    public function down()
    {
        DB::statement('SET FOREIGN_KEY_CHECKS = 0');
        Schema::dropIfExists('item_sizes');
        DB::statement('SET FOREIGN_KEY_CHECKS = 1');
    }


}
<?php


use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;


class ItemColors extends Migration
{


    public function up()
    {


        Schema::create('item_colors', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('colorCode');
            $table->timestamps();
        });


    }


    public function down()
    {
        DB::statement('SET FOREIGN_KEY_CHECKS = 0');
        Schema::dropIfExists('item_colors');
        DB::statement('SET FOREIGN_KEY_CHECKS = 1');
    }


}

Есть идеи, что я сделал не так?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

используйте item_size_id вместо ìtem_size_id

, поскольку ваше имя поля базы данных равно item_size_id

, поэтому просто измените его

use Illuminate\Database\Seeder;
use Carbon\Carbon;


class ItemOptionsSeeder extends Seeder
{


public function run()
{
    //blancas
    DB::table('item_options')->insert([ 'item_id' => 1, 'item_color_id' => 1, 'item_size_id' => 1, 'stock' => 10 ]);
    //negras
    DB::table('item_options')->insert([ 'item_id' => 1, 'item_color_id' => 2, 'item_size_id' => 2, 'stock' => 10 ]);
    //rojas
    DB::table('item_options')->insert([ 'item_id' => 1, 'item_color_id' => 3, 'item_size_id' => 3, 'stock' => 10 ]);
    //verdes
    DB::table('item_options')->insert([ 'item_id' => 1, 'item_color_id' => 4, 'item_size_id' => 4, 'stock' => 10 ]);

}


}
1 голос
/ 25 февраля 2020

Надеюсь, это поможет. после того, как я посмотрю на твой код, я увижу твои ошибки в написании твоего DBSeed просто измените 'ìtem_size_id' => 'item_size_id' . это будет исправлено.

Надеюсь, это поможет. спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...