我想对这种关系进行思考,我认为这种关系是多对多的,我有3个模型,分别是衬衫模型,衬衫颜色模型和衬衫尺寸模型。现在,我可以这样说:
一件衬衫可以有多种颜色和尺寸,但是您也可以说一件衬衫将具有一种颜色和一种尺寸(一件衬衫不能一次具有多种颜色/尺寸...),所以这让我很困惑。我觉得这必须是衬衫,大小和颜色之间的多对多关系,但我不确定如何(以及是否应该这样做)?
这是我的迁移
Schema::create('shirts', function (Blueprint $table) {
$table->increments('id');
$table->string('slug')->unique();
$table->string('url')->unique();
$table->string('title')->unique();
$table->longText('body');
$table->decimal('finalPrice', 5,2);
$table->integer('totalCount');
$table->string('image')->nullable();
$table->boolean('isVisible')->default(false);
$table->boolean('beenPublished')->default(false);
$table->boolean('scheduleForMail')->default(false);
$table->timestamps();
});
Schema::create('shirtcolors', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('hexColor');
$table->timestamps();
});
Schema::create('shirtsizes', function (Blueprint $table) {
$table->increments('id');
$table->string('title')->nullable();
$table->timestamps();
});
答案 0 :(得分:0)
创建表格“ shirt_size_colors”
php artisan make:migration create_shirt_size_colors_table
正在迁移:
Schema::create('shirt_size_colors', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('shirt_id');
$table->foreign('shirt_id')->references('id')->on('shirts')->onDelete('cascade');
$table->unsignedBigInteger('color_id');
$table->foreign('color_id')->references('id')->on('shirtcolors')->onDelete('cascade');
$table->unsignedBigInteger('size_id');
$table->foreign('size_id')->references('id')->on('shirtsizes')->onDelete('cascade');
$table->timestamps();
});
根据您的问题,您可以在此处添加一件颜色和尺寸均一的衬衫 一件衬衫,有多种颜色和尺寸。
例如:
对于一种具有一种颜色和一种尺寸的衬衫 衬衫ID 1,颜色ID 1,尺寸ID 1 然后按照下面的表格条目
-------------------------------------
shirt_id | color_id | size_id |
-------------------------------------
1 | 1 | 1 |
-------------------------------------
对于一件具有多种颜色和多种尺寸的衬衫 衬衫ID 2,颜色ID [1,2],尺寸ID [1,2] 然后按照下面的表格条目
-------------------------------------
shirt_id | color_id | size_id |
-------------------------------------
2 | 1 | 1 |
-------------------------------------
-------------------------------------
2 | 1 | 2 |
-------------------------------------
------------------------------------
2 | 2 | 1 |
-------------------------------------
-------------------------------------
2 | 2 | 2 |
-------------------------------------
创建模型
php artisan make:model ShirtSizeColors
在ShirtSizeColors模型中
这里我使用的衬衫,衬衫尺寸,衬衫颜色模型可以用您的模型名称替换
protected $table = 'shirt_size_colors';
public $timestamps = true;
protected $fillable = ['shirt_id', 'color_id', 'size_id'];
//for shirt data
public function shirt(){
return $this->belongsTo(Shirt::class, 'shirt_id');
}
//for color data
public function color(){
return $this->belongsTo(ShirtColor::class, 'color_id');
}
//for size data
public function size(){
return $this->belongsTo(ShirtSize::class, 'size_id');
}
现在衬衫模型中的关系
// for get shirt colors and sizes
public function shirt_size_colors(){
return $this->hasMany(ShirtSizeColors::class, 'shirt_id');
}