Laravel захватить связанные модели на основе тегов - PullRequest
0 голосов
/ 24 июня 2018

У меня есть две модели, Expense и Tag, которые имеют отношение ко многим.

Для каждого Расхода я могу добавить несколько тегов, которые хранятся в сводной таблице с помощью sync. Таблица называется expense_tag.

Теперь на моей странице expenses.show, я хочу показать подробности об одном расходе, очевидно. Но я хочу показать ВСЕ связанные расходы, используя отношение тегов.

Проблема:

У меня есть информация только на один счет. Это означает, что мне нужно собрать все теги, которые назначены на эти расходы, а затем, используя эти теги, взять все расходы, которые были назначены одному или нескольким из этих тегов.

Я хочу воздержаться от необходимости использовать циклы foreach для достижения этой цели. Я пытался с фильтром, но я не уверен, как это сделать. Я просто предпочитаю, чтобы все было просто.

Есть предложения по этому поводу?

Мои отношения в моей модели:

Расход:

public function tags()
{
    return $this->belongsToMany(Tag::class);
}

Метка:

public function expenses()
{
    return $this->belongsToMany(Expense::class);
}

1 Ответ

0 голосов
/ 24 июня 2018

Решение состоит в том, чтобы использовать where in предложение

$tagIds = $expense->tags()->pluck('id')->toArray();
$expenseIds = DB::table('expense_tag')->
    whereIn('tag_id',$tagIds)->pluck('expense_id')->toArray();
$relatedexpenses = Expense::whereIn('id', $expenseIds)->get();

примечание: здесь используются 3 запроса, поэтому он может быть немного медленнее, чем полное решение SQL, но все должно быть в порядке.

...