Запрос модели внутри «с» - PullRequest
       5

Запрос модели внутри «с»

0 голосов
/ 01 февраля 2019

Я делаю чат-API в Laravel.У меня есть три модели.User Chat и Message и у них есть соответствующие таблицы.

таблица пользователей

id|name|email|other fields

таблица чатов

id|user_id|receiver_id

таблица сообщений

id|chat_id|message|created_at|updated_at|

Результат:

{
    "data": [
        {
            "id": 7,
            "chat_id": 5,
            "message": "User 2 to 1",
            "created_at": "2019-02-01 11:32:29",
            "updated_at": "2019-02-01 11:32:29",
            "chat": null
        },
        {
            "id": 6,
            "chat_id": 1,
            "message": "Sample Chat",
            "created_at": "2019-02-01 10:09:22",
            "updated_at": "2019-02-01 10:09:22",
            "chat": {
                "id": 1,
                "user_id": 1,
                "receiver_id": 1,
                "created_at": "2019-02-01 09:41:59",
                "updated_at": "2019-02-01 10:09:22"
            }
        },
        {
            "id": 2,
            "chat_id": 1,
            "message": "Sample Chat",
            "created_at": "2019-02-01 09:42:34",
            "updated_at": "2019-02-01 09:42:34",
            "chat": {
                "id": 1,
                "user_id": 1,
                "receiver_id": 1,
                "created_at": "2019-02-01 09:41:59",
                "updated_at": "2019-02-01 10:09:22"
            }
        },
        {
            "id": 1,
            "chat_id": 1,
            "message": "Sample Chat",
            "created_at": "2019-02-01 09:41:59",
            "updated_at": "2019-02-01 09:41:59",
            "chat": {
                "id": 1,
                "user_id": 1,
                "receiver_id": 1,
                "created_at": "2019-02-01 09:41:59",
                "updated_at": "2019-02-01 10:09:22"
            }
        }
    ]
}

Я пытался

$messages = Message::with(['chat' => function($query) use($user){
                        $query->where('user_id', $user->id);
                    }])
                    ->latest()
                    ->get();

Как видите, первая модель чата с данными пуста.

Я ожидаю получить только все сообщения, связанные с идентификатором пользователя, из модели чата.

1 Ответ

0 голосов
/ 01 февраля 2019

используйте whereHas в вашем запросе только для того, чтобы чат принадлежал определенному пользователю.

$messages = Message::with(['chat'])->whereHas('chat', function ($query) {
                     $query->where('user_id', $user->id);
                })
                ->latest()
                ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...