衬衫问题->颜色->尺码关系

时间:2019-05-21 19:05:53

标签: php laravel

我想对这种关系进行思考,我认为这种关系是多对多的,我有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();
        });

1 个答案:

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