拉拉维有多种多对多的关系


Laravel multiple many to many relationships?

所以我使用laravel,遇到了一个问题,所以我有关系模型AdSale,然后我用与AdImpression的hasOne关系进行设置。例如,假设我获取所有userId=1的AdSale记录。我得到了5个不同的行,对于这5行中的每一行,我都有5个adImpression行,它们匹配并有关于点击和印象的信息。我的最终目标是获得AdImpression行。然而,当我运行我的有一个Impression()方法时,我得到了未定义的方法。然而,如果我单独对我的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();

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

我得到了5个不同的行,对于这5行中的每一行,我都有5个adImpression行,它们匹配并有关于点击和印象的信息。

基于此,我认为你使用了错误的关系。

1.更改AdSale模型关系

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

2.使用紧急加载:

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

3.作为成员而非方法访问(关系已加载)

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

4.获取印象总数

$sale->impressions->count()