Как использовать Get On Eager-загруженный атрибут в Laravel Eloquent Jensseger Mongodb - PullRequest
0 голосов
/ 13 мая 2018

Я использую Laravel с jenssegers Mongodb Eloquent. Когда я пытаюсь использовать get ([...]) или Different ('...'), это дает нулевые значения в результате. Как я могу использовать get ([eager_loaded_attribute_here]), чтобы получить только тот атрибут, который был загружен с нетерпением?

Пример:

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"
        }
    },
...
]

Но используя 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",
        "sender": null,
        "receiver": null
    },
...
]

Аналогично, при использовании различных:

$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();

Дает:

[
    {
        "0": "5abc2b8b93782d24996aefd8",
        "sender": null,
        "receiver": null
    }
]

1 Ответ

0 голосов
/ 14 мая 2018

Используйте это:

->get()->pluck('sender');

Если вам нужен построитель запросов:

$senderIds = Message::distinct('sender_id')
    ->where('sender_id', '=', Auth::user()->_id)
    [...]
    ->pluck('sender_id');
$senders = Sender::whereKey($senderIds)
    [...]
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...