簡體   English   中英

Laravel:hasManyThrough 關系中的未知列“ìtem_size_id”

[英]Laravel: Unknown column 'ìtem_size_id' in hasManyThrough relationship

我正在嘗試使用 Laravel 建立自己的電子商務商店作為培訓,我與模型 Item、ItemOption、ItemSize 和 ItemColor 建立了 hasManyThrough 關系。 當我用虛擬數據為數據庫做種時出現問題,我收到以下錯誤:

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


}

知道我做錯了什么嗎?

我希望這會有所幫助。 在我查看您的代碼后,我看到您在 DBSeed 上的拼寫錯誤。 只需更改'ìtem_size_id' => 'item_size_id' 它會修復。

希望有幫助。 謝謝

使用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 ]);

}


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM