Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel雄辩的Jensseger Mongodb中使用Get On Eager loaded属性_Php_Eloquent_Eager Loading_Jenssegers Mongodb - Fatal编程技术网

Php 如何在Laravel雄辩的Jensseger Mongodb中使用Get On Eager loaded属性

Php 如何在Laravel雄辩的Jensseger Mongodb中使用Get On Eager loaded属性,php,eloquent,eager-loading,jenssegers-mongodb,Php,Eloquent,Eager Loading,Jenssegers Mongodb,我正在用拉威尔和詹塞格斯·蒙戈德雄辩。当我尝试使用get([…])或distinct(“…”)时,它在结果中给出空值。如何使用get([eager\u-loaded\u-attribute\u here])只获取一个被eager-loaded的给定属性 例如: Message::with(['sender','receiver']) ->where('sender_id', '=', Auth::user()->_id) ->orWhere('receiver_

我正在用拉威尔和詹塞格斯·蒙戈德雄辩。当我尝试使用get([…])或distinct(“…”)时,它在结果中给出空值。如何使用get([eager\u-loaded\u-attribute\u here])只获取一个被eager-loaded的给定属性

例如:

Message::with(['sender','receiver'])
    ->where('sender_id', '=', Auth::user()->_id)
    ->orWhere('receiver_id', '=', Auth::user()->_id)
    ->orderBy($request->orderBy, $request->orderByDirection)
    ->skip(intval($request->offset))
    ->take(intval($request->limit))
    ->get()
给出:

[
    {
        "_id": "5abc2ba193782d24996aefda",
        "receiver_id": "5abc28bd93782d235238c162",
        "text": "Hello!",
        "sender_id": "5abc2b8b93782d24996aefd8",
        "updated_at": "2018-03-28 23:56:17",
        "created_at": "2018-03-28 23:56:17",
        "sender": {
            "_id": "5abc2b8b93782d24996aefd8",
            "name": "Test 5",
            "updated_at": "2018-03-29 00:05:48",
            "created_at": "2018-03-28 23:55:55"
        },
        "receiver": {
            "_id": "5abc28bd93782d235238c162",
            "name": "Test 1",
            "updated_at": "2018-04-20 13:26:00",
            "created_at": "2018-03-28 23:43:57"
        }
    },
...
]
[
    {
        "_id": "5abc2ba193782d24996aefda",
        "sender": null,
        "receiver": null
    },
...
]
[
    {
        "0": "5abc2b8b93782d24996aefd8",
        "sender": null,
        "receiver": null
    }
]
但是使用get:

Message::with(['sender','receiver'])
    ->where('sender_id', '=', Auth::user()->_id)
    ->orWhere('receiver_id', '=', Auth::user()->_id)
    ->orderBy($request->orderBy, $request->orderByDirection)
    ->skip(intval($request->offset))
    ->take(intval($request->limit))
    ->get(['sender'])
给出:

[
    {
        "_id": "5abc2ba193782d24996aefda",
        "receiver_id": "5abc28bd93782d235238c162",
        "text": "Hello!",
        "sender_id": "5abc2b8b93782d24996aefd8",
        "updated_at": "2018-03-28 23:56:17",
        "created_at": "2018-03-28 23:56:17",
        "sender": {
            "_id": "5abc2b8b93782d24996aefd8",
            "name": "Test 5",
            "updated_at": "2018-03-29 00:05:48",
            "created_at": "2018-03-28 23:55:55"
        },
        "receiver": {
            "_id": "5abc28bd93782d235238c162",
            "name": "Test 1",
            "updated_at": "2018-04-20 13:26:00",
            "created_at": "2018-03-28 23:43:57"
        }
    },
...
]
[
    {
        "_id": "5abc2ba193782d24996aefda",
        "sender": null,
        "receiver": null
    },
...
]
[
    {
        "0": "5abc2b8b93782d24996aefd8",
        "sender": null,
        "receiver": null
    }
]
同样,在使用distinct时:

$correspondants=Message::with(['sender','receiver'])
    ->distinct('sender_id')
    ->where('sender_id', '=', Auth::user()->_id)
    ->orWhere('receiver_id', '=', Auth::user()->_id)
    ->orderBy($request->orderBy, $request->orderByDirection)
    ->skip(intval($request->offset))
    ->take(intval($request->limit))
    ->get()
    ->toArray();
给出:

[
    {
        "_id": "5abc2ba193782d24996aefda",
        "receiver_id": "5abc28bd93782d235238c162",
        "text": "Hello!",
        "sender_id": "5abc2b8b93782d24996aefd8",
        "updated_at": "2018-03-28 23:56:17",
        "created_at": "2018-03-28 23:56:17",
        "sender": {
            "_id": "5abc2b8b93782d24996aefd8",
            "name": "Test 5",
            "updated_at": "2018-03-29 00:05:48",
            "created_at": "2018-03-28 23:55:55"
        },
        "receiver": {
            "_id": "5abc28bd93782d235238c162",
            "name": "Test 1",
            "updated_at": "2018-04-20 13:26:00",
            "created_at": "2018-03-28 23:43:57"
        }
    },
...
]
[
    {
        "_id": "5abc2ba193782d24996aefda",
        "sender": null,
        "receiver": null
    },
...
]
[
    {
        "0": "5abc2b8b93782d24996aefd8",
        "sender": null,
        "receiver": null
    }
]
使用以下命令:

->get()->pluck('sender');
如果需要查询生成器:

$senderIds = Message::distinct('sender_id')
    ->where('sender_id', '=', Auth::user()->_id)
    [...]
    ->pluck('sender_id');
$senders = Sender::whereKey($senderIds)
    [...]
    ->get();

你想达到什么目的?@JonasStaudenmeir我想选择一个渴望加载的字段。我只需要返回发送者,所以理想情况下我希望从其父对象“取消嵌套”发送者,并且只返回发送者数组。。。理想情况下,我还希望能够对发送者执行进一步的查询,就像SQLSelect(投影)一样。但当我在一个急切加载的字段上使用select时,我只得到null。。。是否有其他方法可以获取返回querybuilder的(…),以便我可以继续链接进一步的查询?谢谢。如果你不需要
接收者
,你应该只使用
和('sender')
@JonasStaudenmeir是的,但这只是为了表明出于某种原因,其他急切加载的字段会受到影响。。。在这种情况下,我希望只得到sender字段,但由于某种原因,得到了两个带空值的急切加载字段…太好了,有没有办法让它返回querybuilder,这样我就可以继续链接查询(例如orderBy、take等)?我扩展了我的答案。非常感谢。。。这对大型收藏安全吗?它似乎正在获取所有发送者id,如果在第一个查询(SenderID)上执行take/limit,这将是安全的,但我认为如果存在大量SenderID(例如:10m),并且需要在第二个查询(对于$senders)中执行take/limit,而不是在第一个查询中执行第一个,这将是相当不安全的
表示您的
take()
skip()
调用等。我只想保持简短,并将重点放在相关部分。