Laravel有多对多的关系?

时间:2015-04-01 17:55:33

标签: php mysql laravel model eloquent

所以我正在使用laravel而且我遇到了一个问题,所以我有关系模型AdSale,然后我有与AdImpressions的hasOne关系的设置。举例来说,我抓住所有AdSale记录,其中userId = 1.我返回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它可以工作,但这不起作用。我需要能够从整个展示中获得总价值。任何信息都会很棒。

1 个答案:

答案 0 :(得分:0)

  

我返回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()