【问题标题】:Laravel multiple many to many relationships?Laravel 多个多对多关系?
【发布时间】:2015-06-06 11:59:39
【问题描述】:

所以我正在使用 laravel 并且遇到了问题,所以我有关系模型 AdSale,然后我有一个与 AdImpressions 有 hasOne 关系的设置。例如,假设我获取 userId = 1 的所有 AdSale 记录。我得到 5 个不同的行,对于这 5 个行中的每一行,我有 5 个匹配的 adImpression 行,并具有有关点击次数和展示次数的信息。我的最终目标是获得 AdImpression 行。但是,当我运行我有一个 Impressions() 方法时,我得到未定义的方法。但是,如果我单独对我的 AdSale 记录进行 foreach,然后运行我的 Impresssions() 方法,它就可以工作。所以这是我的代码

class AdSale extends Eloquent{

     protected $table = 'AdSale';
     public function impressions()
     {
         return $this->hasOne('AdImpression','adSaleId','id');
     }

}

在这里,我通过 AdImpression 表中的 adSaleId 将我的 AdSale 连接到其各自的 AdImpression。

这就是我在控制器中运行的。

$sales= AdSale::where('userId','=', 1)->get();
$impressions = $sales->impressions();

现在我对此的期望是我的 $impressions 变量将具有与 adSaleId 相关的 AdImpressions 条目,但是我得到未定义的函数,因为有多个值返回到 $saleLocation。如果我将其更改为 ->frist();或者在 $saleLocation 上做一个 foreach 它可以工作,但这不起作用。我需要能够从整体印象中汇总价值。任何信息都会很棒。

【问题讨论】:

  • 您确定hasOneAdSale 的正确关系吗?听起来更像是hasMany,不是吗?我的回答假设是后者,但可能甚至适用于前者。

标签: php mysql laravel model eloquent


【解决方案1】:

我返回了 5 行不同的行,对于这 5 行中的每一行,我有 5 个匹配的 adImpression 行,并且包含有关点击次数和展示次数的信息。

基于此,我假设您使用了错误的关系。

1.更改 AdSale 模型关系

return $this->hasMany('AdImpression','adSaleId');

2。使用eager loading

$sales = AdSale::with('impressions')->where('userId', 1)->get();

3.作为成员而不是方法访问​​(关系已经加载)

foreach($sales as $sale) {
    foreach($sale->impressions as $impression) {
        // 
    } 
}

4.获取展示次数总和

$sale->impressions->count()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 2018-01-22
    • 2016-02-26
    • 2016-01-04
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多