伙伴, 我的第一篇文章,搜索并尝试不同的解决方案和方法-最终在这里结束了。
我有一个包含几个相关表的数据库。客户有一个位置,该位置具有多个设置(生命周期,例如计划,构建,运行),每个设置都有不同的电路。基本上:
customers-> locations-> settings-> circuits
现在,我需要一个带有设置和电路信息的位置列表,在这里选择电路的供应商。
我该如何雄辩地编写此查询?到目前为止,这是我尝试过的操作,但似乎忽略了“哪里供应商”子句...
$locations = Locations::with(
['settings' => function($query) use ($request)
{
$query->with(
['circuits' =>function($query2) use ($request)
{
$query2->where('supplier', $request->supplier);
}
]
);
}
])
->where('customer_id', $customers_id)
->orderBy('country')
->orderBy('city')
->get();
我敢肯定,所有的“ hasMany”和“ belongsTo”扩展名都可用。 感谢您的阅读和回答 udowsky
更新:工作代码,基于Enver的提示:
$locations = Locations::with('settings')
->whereHas('settings.circuits', function($query) use ($request)
{
$query->where('supplier', $request->supplier);
}
)
->where('customer_id', $report->customers_id)
->orderBy('country')
->orderBy('city')
->get();
HasManyThrough方法也可以顺利进行:
扩展位置模型:
public function circuits()
{
return $this->hasManyThrough('App\Circuits', '\App\Settings');
}
,然后使用以下查询:
$locations = Locations::with('circuits')
->whereHas('circuits', function($query) use ($request)
{
$query->where('supplier', $request->supplier);
}
)
->where('customer_id', $report->customers_id)
->orderBy('country')
->orderBy('city')
->get();
谢谢大家!
答案 0 :(得分:1)
您可以使用嵌套关系查询进行快速加载。
示例:
import { Effect, Actions, ofType } from '@ngrx/effects';
//....
@Injectable()
export class AppEffects {
// ....
@Effect()
myAction$ = this.actions$.pipe(
ofType<fromActions.GetItems>(MyActionTypes.GET_ITEMS),
switchMap(action => {
console.log('i am in effects', action);
return this.myService.getItems().pipe(
map(data => new fromActions.GetItemsSuccess(data)),
catchError(err => of(new fromActions.GetItemsSuccess(err)))
);
})
);
}