我有3张桌子:
表的关系是:
现在我需要通过这种方式访问:
$response = User::select(['user_id'])->first();
$response->transactionHeader->transactionDetail->where('trans_detail_id', '=', '1');
上面的代码显示正确的数据 BUT 无法按->where('trans_detail_id', '=', '1');
进行过滤。 trans_detail_id
位于 transactionDetail 表中。没有错误,但我的问题是为什么数据没有被trans_detail_id='1'
过滤?
请修复我的代码并解释原因?
谢谢
答案 0 :(得分:2)
您是否尝试过急切加载与嵌套关系上的查询的关系?
$response = User::select(['user_id'])->with(['transactionHeader.transactionDetail' => function($query) {
$query->where('trans_detail_id', 1);
}])->first();
答案 1 :(得分:0)
你可以这样试试:
$response = User::select(['user_id'])->first();
$response->transactionHeader()->transactionDetail()->where('trans_detail_id', '=', '1');
这种方式也有效:
$response = User::select(['user_id'])->with(['transactionHeader.transactionDetail' => function($query) {
$query->where('trans_detail_id', 1);
}])->first();
但是现在你想为'trans_detail_id'
使用变量数据而不是1$value = $request->value_to_filter_data;
$response = User::select(['user_id'])->with(['transactionHeader.transactionDetail' => function($query) use ($value) {
$query->where('trans_detail_id',$value);
}])->first();
答案 2 :(得分:-1)
希望它有所帮助!
$response->transactionHeader->transactionDetail->where('trans_detail_id', '1');