如何以关系雄辩的方式添加“where”子句?

时间:2017-07-31 15:30:11

标签: php laravel eloquent

我有3张桌子:

  • 用户
  • 交易标题
  • 交易明细

表的关系是:

  • 用户有一个transactionHeader
  • transactionHeader属于用户
  • transactionHeader有许多to transactionDetail
  • transactionDetail属于用户

现在我需要通过这种方式访问​​:

$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'过滤?

请修复我的代码并解释原因?

谢谢

3 个答案:

答案 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');