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

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,它可以工作,但那不行。我需要能够从整个印象中总结出价值观。任何信息都会很棒。

最佳答案

我得到5个不同的行,每5行我有5个匹配的adImpression行,并有关于点击和印象的信息。
基于这一点,我认为你用错了关系。
一。更改AdSale模型关系

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

2。使用eager loading
$sales = AdSale::with('impressions')->where('userId', 1)->get();

三。以成员身份访问,而不是方法(关系已加载)
foreach($sales as $sale) {
    foreach($sale->impressions as $impression) {
        //
    }
}

四。得到印象的总和
$sale->impressions->count()

关于php - Laravel有多对多关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29397563/

10-15 10:53