Laravel: цикл «многие ко многим» и доступ к данным другой таблицы - PullRequest
0 голосов
/ 12 июня 2018

Моя ситуация: у меня CAMPAIGNS и BANNERS, между ними MANY-TO-MANY отношения.

Каждая кампания может иметь несколько баннеров, и каждый баннер может принадлежать нескольким кампаниям.Сводная таблица хранит эти отношения.Тогда у меня есть еще одна таблица, где я храню статистику баннера.Статистика баннера имеет много общего с кампанией, поэтому я могу получить доступ ко всему, что называется моделью CAMPAIGNS.

Теперь возникает проблема: в представлении я перебираю $campaigns->banner_stats, что позволяет мнеполучить доступ ко всей статистике баннеров, назначенных кампании, но я не знаю, как получить доступ к данным баннера в этом цикле (у них есть некоторые параметры, такие как имя, URL, размер и т. д.).

Я могу сделать $campaigns->banners, находясь в цикле $campaigns->banner_stats, а затем выполнить условие if, соответствующее идентификатору баннера, чтобы получить эти дополнительные параметры, но я думаю, что это неправильный подход.

У меня такое ощущение, что мой дизайн / отношения плохие. Также проблема в том, что когда баннер отсоединен от кампании, я больше не буду получать параметры баннера, хотя данные для него все равно останутся.в таблице статистики.Таким образом, один цикл будет возвращать другое количество результатов, чем другой.

Есть идеи, как мне подойти к этому и улучшить его, чтобы я мог легко получить доступ ко всему в 1 цикле?

Спасибо.

Ответы [ 2 ]

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

Ваш вопрос неясен, учитывая отсутствие определений таблиц и запросов (и я не думаю, что «сводная таблица» означает то, что вы думаете, что это означает), но я думаю, что вы, возможно, захотите выполнить объединение для объединения данныхиз разных таблиц в одном результате.Это позволило бы использовать возможности реляционных баз данных вместо ручной циклической обработки таблиц.

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

установить отношение «отношение к» от Banner Statisctic к Banner, что-то вроде этого:

class BannerStat extends Model
{
    public function banner()
    {
        return $this->belongsTo('App\Banner');
    }
}

, после этого вы можете вызвать баннер внутри цикла следующим образом:

foreach ( $campaigns->banner_stats as $key => $banner_statistic ) {
    $banner = $banner_statistic->banner;
}
...