Laravel:多对多循环并访问另一个表的数据

时间:2018-06-12 01:29:35

标签: php laravel database-design relational-database

我的情况: 我之间的CAMPAIGNSBANNERS之间存在MANY-TO-MANY关系。

每个广告系列可以有多个横幅广告,每个广告系列可以属于多个广告系列。 数据透视表存储这些关系。 然后我还有一个表存储横幅统计信息。 横幅统计信息与广告系列有很多关系,因此我可以访问所有调用CAMPAIGNS模型的内容。

现在问题是: 在视图中我循环遍历$campaigns->banner_stats,这允许我访问分配给广告系列的横幅的所有统计信息,但我不知道如何访问是此循环中的横幅数据(它们有一些参数,如名称,URL,大小等)。

我可以在$campaigns->banners循环中执行$campaigns->banner_stats,然后使用if条件匹配横幅ID以获取其他参数,但我认为这不是正确的方法。

我觉得我的设计/关系很糟糕。还有一个问题就是当横幅与广告系列分离后,我将不再获得横幅参数,尽管它的数据将会仍然留在统计表中。因此,一个循环将返回不同数量的结果。

任何想法我应该如何处理并改进它以便我可以轻松访问1循环中的所有内容?

谢谢。

2 个答案:

答案 0 :(得分:0)

设置从Banner Statisctic到Banner的'belongsTo'关系,如下所示:

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

之后你可以像这样调用循环中的横幅:

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

答案 1 :(得分:0)

你的问题不清楚,因为缺乏表格定义和查询(而且我不认为"数据透视表"意味着你认为这意味着什么),但我认为你可能想要表现连接以便在单个结果中组合来自不同表的数据。这将利用关系数据库的强大功能,而不是手动循环表。