Проблема с рубашкой -> цвета -> размеры отношения Laravel - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь обернуть голову об этих отношениях, которые, я думаю, многие ко многим, у меня есть 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 голосов
/ 22 мая 2019

Создать таблицу "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

Здесь я использую модель Shirt, ShirtSize, ShirtColor, которую вы можете заменить названием вашей модели

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');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...