phplaravellaravel-5.8

How to get relation 'table1' OR 'table2' OR 'table3' into one table in laravel?


I'm a newbie here and also in Laravel, so please excuse me. I have a table named 'products' and this table related to the 'recipes' table via many-to-one relation(One of the recipes has a lot of products). -'recipes' table keeps reference code- Here's where I stuck; the 'recipes' table has one-to-one relations to three different tables that keeping the "real" product recipes. Those tables have different recipe contents like,

Alkaline table;

Schema::create('alkalines', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->integer('recipe_id');
    $table->integer('sodium_bicarbonate');
    $table->timestamps();
});

Acets table;

Schema::create('acets', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->integer('recipe_id');
    $table->integer('sodium_chloride');
    $table->integer('acetic_acid');
    $table->timestamps();
});

I'm able to fetch all relations if I start with one of these(e.g with Acet model). But if, I list all of products and try to fetch it's recipe, I have to use a bunch of 'if and else's. Just can't get the recipe like;

$product->recipe-> "one of the three recipe tables' content"

And my 'recipes' table:

Schema::create('recipes', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('ref');
    $table->timestamps();
});

I believe it's easy, just missing something. Please help! Thanks in advance!


Solution

  • I think You can get every relation individual them merge the arrays like

    $arr1 = Alkalines::with('recipe')->get()->toArray();
    $arr2 == Acets::with('recipe')->get()->toArray();
    $arr3 = ***************************;
    
    array_merge($arr1, $arr2, $arr3)