Laravel - BelongsToMany получает только текущую связанную запись - PullRequest
2 голосов
/ 26 февраля 2020

У меня есть две модели, Ricetta и Ingrediente, и эти отношения:

Ingrediente. php

public function ricetta()
    {
        return $this->belongsToMany('\App\Models\Ricetta', 'ricetta_has_ingrediente', 'ingrediente_id', 'ricetta_id')->withPivot('qta', 'unita_misura_id');
    }

Ricetta. php

public function ingrediente()
    {
        return $this->belongsToMany('\App\Models\Ingrediente', 'ricetta_has_ingrediente', 'ricetta_id', 'ingrediente_id')->withPivot('qta', 'unita_misura_id');
    }

Итак, с помощью этого запроса я могу получить все Ingrediente в Ricetta:

$result = $model->newQuery()
    ->select('ingrediente.*')
    ->with('ricetta')
    ->whereHas('ricetta', function($query){
        $query->where('ricetta_has_ingrediente.ricetta_id', 1);
      })->get();

Это работает, но в $result->ricetta у меня есть все Ricetta с Ingredinte, не только текущий Ricetta (с id = 1).

Как я могу изменить запрос, чтобы получить только текущий Ricetta?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Попробуйте использовать функцию обратного вызова

$result = Model::select('ingrediente.*')->with([
         'ricetta' => function($query) {
            $query->where('id', 1);
          }
         ])->get();
0 голосов
/ 26 февраля 2020

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

$result = $model->newQuery()
    ->select('ingrediente.*')
    ->with([
        'ricetta' => static function($query) {
            $query->where('ricetta.id', 1);
        }
    ])
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...