Laravel:渴望加载重复

时间:2015-01-21 21:21:16

标签: laravel-4

我试图设置急切加载以阻止N + 1查询,但我发现我必须复制一些急切的加载才能让laravel使用“渴望加载” #39;数据。当然,复制急切的负载会导致重复的查询。

这是我的加载电话:

$provider->load('ads.gallery.images', 'ads.thumbnail', 'ads.user', 'ads.provider.values.field', 'values.field', 'galleries.images');

提供者是用户的多态子类型。这适用于显示用户values列表的用户个人资料页面,以及所有广告的列表。广告显示是在整个网站上重复使用的子视图,并且还有一个显示用户values列表的标签。是的,在此页面上它是多余的,但这就是网站的设计方式。

我希望laravel在子视图访问时重用已经加载的values.field列表,但它没有,所以我不得不将ads.provider.values.field添加到列表中,复制了查询:

select `provider_field_values`.*, `provider_values`.`user_id` as `pivot_user_id`, `provider_values`.`value_id` as `pivot_value_id` from `provider_field_values` inner join `provider_values` on `provider_field_values`.`id` = `provider_values`.`value_id` where `provider_values`.`user_id` in ('3')
select * from `provider_fields` where `provider_fields`.`id` in ('1', '2', '3')
select `provider_field_values`.*, `provider_values`.`user_id` as `pivot_user_id`, `provider_values`.`value_id` as `pivot_value_id` from `provider_field_values` inner join `provider_values` on `provider_field_values`.`id` = `provider_values`.`value_id` where `provider_values`.`user_id` in ('3')
select * from `provider_fields` where `provider_fields`.`id` in ('1', '2', '3')

有什么办法可以消除这种重复吗?我不确定问题是在视图如何访问数据或控制器中是否存在。如果需要,我可以添加视图代码的片段。

编辑:模型关系:

//Provider model
public function values()
{
    return $this->belongsToMany('ProviderFieldValue', 'provider_values', 'user_id', 'value_id');
}

//ProviderField model
public function fieldValues()
{
    return $this->hasMany('ProviderFieldValue', 'field_id');
}

//ProviderFieldvalue model
public function field()
{
    return $this->belongsTo('ProviderField');
}

//ProviderValue model (this is a pivot table)
public function provider()
{
    return $this->belongsTo('Provider');
}

public function fieldValue()
{
    return $this->belongsTo('ProviderFieldValue');
}

0 个答案:

没有答案