所以我使用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()