[英]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.