所以我正在使用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它可以工作,但这不起作用。我需要能够从整个展示中获得总价值。任何信息都会很棒。
答案 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()