Laravel таблица наследования. Как создать отношения - PullRequest
0 голосов
/ 31 октября 2019

У меня есть следующие таблицы, которые представляют покупку. Покупка содержит много предметов. Элемент может быть двух возможных типов MaterialItem / ServiceItem. Элемент материала имеет связанный материал, в то время как элемент ServiceItem содержит только несколько текстовых полей.

В таблице «purchaseases_item_base» содержатся столбцы, общие для двух возможных типов элементов.

Как определить две взаимосвязи в моей модели закупки, одну для получения связанных Материальных позиций, а другую для Сервисных позиций?

    // TABLE 1 purchases
    Schema::create('purchases', function(Blueprint $table) {
        $table->bigIncrements("id")->unsigned();            
        $table->text("details");            
        $table->timestamps();
        $table->softDeletes();
    });



    // TABLE 2 purchases_item_base
    Schema::create('purchases_item_base', function(Blueprint $table) {
        $table->bigIncrements("id")->unsigned();
        $table->unsignedBigInteger("purchase_id")->unsigned();          
        $table->decimal("price", 15 , 2);            
        $table->unsignedTinyInteger("priority");
        $table->text("obs");
        $table->timestamps();
    });

    Schema::table('purchases_item_base', function(Blueprint $table) {
        $table->foreign('purchase_id')->references('id')->on('purchases');            
    });



   // TABLE 3 materials
    Schema::create('materials', function(Blueprint $table) {
        $table->bigIncrements("id")->unsigned();
        $table->string('color');
        $table->string('weight');
        $table->string('brand');
        $table->string('model');
    });



    // TABLE 4 purchase_item_material
    Schema::create('purchase_item_material', function(Blueprint $table) {
        $table->unsignedBigInteger("base_item_id")->unsigned();
        $table->unsignedBigInteger("material_id")->unsigned();
        $table->unsignedInteger("quantity")->default(1);
    });

    Schema::table('purchase_item_material', function(Blueprint $table) {
        $table->foreign('base_item_id')->references('id')->on('purchases_item_base');
        $table->foreign('material_id')->references('id')->on('materials');
    });




    // TABLE 5 purchase_item_service
    Schema::create('purchase_item_service', function(Blueprint $table) {
        $table->unsignedBigInteger("base_item_id")->unsigned();
        $table->string("pn_number");
        $table->text("description");
    });

    Schema::table('purchase_item_service', function(Blueprint $table) {
        $table->foreign('base_item_id')->references('id')->on('purchases_item_base');            
    })

1 Ответ

0 голосов
/ 31 октября 2019

Попробуйте использовать полиморфное отношение один ко многим

См. Документацию для лучшего понимания https://laravel.com/docs/5.8/eloquent-relationships#one-to-many-polymorphic-relations

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...