Laravel 使用 join 获取数据 return null

Laravel use join to fetch data return null

在下面这个获取数据的结果中:

{
    "purchases": [
        {
            "id": 1,
            "member_id": 1,
            "mediator_id": 2,
            "type": null,
            "cash": 38712402,
            "created_at": "2017-11-08 06:40:45",
            "updated_at": "2017-11-08 06:40:45",
            "deleted_at": null,
            "cheques": [
                {
                    "id": 1,
                    "purchase_id": 1,
                    "expire_date": "1396-01-19",
                    "amount": 97094060,
                    "isRejected": 0,
                    "created_at": "2017-11-08 06:40:45",
                    "updated_at": "2017-11-08 06:40:45",
                    "deleted_at": null
                }
            ]
        },
        {
            "id": 2,
            "member_id": 1,
            "mediator_id": 2,
            "type": null,
            "cash": 46760191,
            "created_at": "2017-11-08 06:40:45",
            "updated_at": "2017-11-08 06:40:45",
            "deleted_at": null,
            "cheques": []
        }
    ]
}

我通过这段代码得到的:

$purchases = \App\Purchase::with('cheques')->where('member_id',
        $request->userId)->get();

我正在尝试从 cheques 获取 amount 并从 purchases 获取 'cash','created_at',其中 'member_id'=$request->userId,但我得到空 cheques当我使用此代码时:

$purchases = \App\Purchase::with(array('cheques'=>function($query){
        $query->select('amount');
    }))->where('member_id',$request->userId)->get(['cash','created_at']);

尝试文档中的 Eager Loading Specific Columns 部分 - https://laravel.com/docs/5.5/eloquent-relationships

它说:

When using this feature, you should always include the id column in the list of columns you wish to retrieve.

$purchases = \App\Purchase::with(
    array('cheques' => function($query){
        $query->select('amount');
    })
    )->where('member_id',$request->userId)
    ->select('cash','created_at')->get();

如果要select列使用get方法采集,需要传递id:

->get(['id', 'cash', 'created_at']); 或者您可以使用 ->select('cash', 'created_at')->get();

你喜欢哪个。

你能试试这个吗?

$purchases = \App\Purchase::with(array('cheques'=>function($query){
    $query->select('id', 'amount', 'purchase_id');
}))->where('member_id',$request->userId)->get(['cash','created_at']);