如何在laravel中将关系“ table1”或“ table2”或“ table3”放入一个表中?

时间:2019-07-16 20:55:57

标签: laravel laravel-5.8

我在这里也是Laravel的新手,所以请原谅。我有一个名为“产品”的表,该表通过多对一关系与“食谱”表相关(其中一个配方有很多产品)。 -'recipes'表保留参考代码-这是我卡住的地方; “食谱”表与三个保留“真实”产品配方的表具有一对一的关系。这些表具有不同的配方内容,例如

碱性表;

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

Acets表;

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

如果我从这些关系之一开始(例如,使用Acet模型),我就能获取所有关系。 但是,如果我列出了所有产品并尝试获取其配方,则必须使用大量的“ if and else”。只是无法获得食谱;

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

还有我的“食谱”表:

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

我相信这很容易,只是缺少了一些东西。请帮忙!预先感谢!

3 个答案:

答案 0 :(得分:0)

我认为 您可以使每个关系单独合并到数组中 喜欢

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

答案 1 :(得分:0)

欢迎来到。

如果已正确建立关系,则无论嵌套在不同关系中的深度如何,都可以使用“ collection-> pluck()”来检索其结果。

示例:

$game->players->stats不起作用,因为players是一个没有stats属性,方法或字段的集合。

因此,您可以使用pluck()和崩溃()来检索关系结果:

$game->players->pluck('stats')->collapse()

答案 2 :(得分:0)

我稍微编辑了@mohamedhassan中的代码,就可以了!

public function solutionMerge()
{
    $arr1=Alkaline::with('recipe')->get();
    $arr2=Acet::with('recipe')->get();
    $arr3=Glucose::with('recipe')->get();

    $solutionMerge = collect([$arr1,$arr2,$arr3]);

    return $solutionMerge;
}

只需将数组分配到集合中即可。然后使用collapse()。 现在,我可以提取$solutionMerge->recipe->id之类的数据 谢谢大家的宝贵时间和丰富的知识!