Laravel красноречивое множественное соединение с СО - PullRequest
0 голосов
/ 16 марта 2020

Я не знаю, как создать Laravel eloquent объединение, когда у меня несколько таблиц:

        Schema::create('released_items', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('code', 10);
            $table->string('description');
          ***
            $table->timestamps();
        });

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

public function up()
    {
        Schema::create('recipe_lines', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('fk_recipe_id')->unsigned();
            $table->bigInteger('fk_released_items_id')->unsigned();
            $table->string('code', 10);
            $table->float('quantity');
            $table->timestamps();



            $table->foreign('fk_recipe_id')
                ->references('id')
                ->on('recipes')
                ->onDelete('cascade');

            $table->foreign('fk_released_items_id')
                ->references('id')
                ->on('released_items')
                ->onDelete('cascade');

        });
    }

У меня есть модель "Рецепт":

  public function lines()
    {
        return $this->hasMany(\App\RecipeLine::class, 'fk_recipe_id');
    }
 public function released_item()
    {
       return $this->hasOne(\App\RecipeLine::class, 'fk_released_items_id');
    }

И Контроллер RecipeLines:

public function show($id)
    {
        $lines = Recipe::with('lines', 'released_item')->where('recipes.id', $id)->findOrFail($id);
}

Но я все еще не могу извлечь данные из release_items. Кто-нибудь знает, как это работает и может объяснить?

1 Ответ

1 голос
/ 16 марта 2020

Ваши отношения настроены неправильно в вашей модели. Я понимаю, что в рецепте есть одна или несколько строк рецепта, но не ясно, есть ли в рецепте один элемент выпуска ИЛИ, если в строке рецепта есть один элемент выпуска.

Исходя из вашего комментария ниже, приведенные ниже отношения должны быть в вашей модели строки рецепта, а не модели рецепта:

public function released_item()
{
   return $this->hasOne(\App\ReleasedItem::class, 'fk_released_items_id');
}

Тогда ваш запрос должен выглядеть примерно так:

public function show($id)
{
    $lines = Recipe::with('lines.released_item)->findOrFail($id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...