Laravel Eloquents: проверьте, нет ли данных о дочерних отношениях, не возвращайте никаких данных - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть три сущности Inbox , Document , Category

Входящие имеют отношение к документу, а документ имеет много категорий,

У меня есть запрос Eloquent, который проверяет связь между папкой «Входящие» и документом и возвращает папку «Входящие» с данными документов,

Проблема в следующем: Я хочу перечислить все входящие сообщения с данными документов, только если у документа нет категории (если у него есть одна или несколько категорий, я не хочу перечислять этот документ с его входящими почтовыми ящиками).

Итак, у меня есть этот запрос сейчас, он не работает правильно:

public static function getUserAndJobPositionsInbox($id, $type)
{
       return self::with(['documents' => function($q){

           $q->has('categories', '==', 0);

       }])->where('inboxable_id', $id)
          ->where('inboxable_type', $type)->get();
}

Этот запрос вернет Входящие данные без документов, если документы не имеют категорий

НО я не хочу входящие данные, если документы не имеют категорий. просто верните пустое

Результат:

{
    "data": {
        "user_inbox_documents": null,
        "job_positions_documents": [
            [
                {
                    "id": 2,
                    "document_id": 3,
                    "document_reference": "RPL2p",
                    "inboxable_id": 3,
                    "inboxable_type": "App\\Models\\JobPosition",
                    "path_id": "2",
                    "created_at": "2018-09-12 13:21:23",
                    "updated_at": "2018-09-12 13:21:23",
                    "documents": []
                }
            ],
            [
                {
                    "id": 1,
                    "document_id": 3,
                    "document_reference": "RPL2p",
                    "inboxable_id": 2,
                    "inboxable_type": "App\\Models\\JobPosition",
                    "path_id": "1",
                    "created_at": "2018-09-12 13:21:23",
                    "updated_at": "2018-09-12 13:21:23",
                    "documents": []
                }
            ]
        ]
    }
}

Заранее спасибо.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете проверить наличие вложенных отношений, используя точку (.), Например, следующий код (документация Laravel) получает все сообщения, которые имеют хотя бы один комментарий, и этот комментарий должен иметь как минимум один голос.

// Retrieve all posts that have at least one comment with votes...
$posts = App\Post::has('comments.votes')->get();

Таким образом, из приведенного выше примера вы можете изменить свой код следующим образом:

public static function getUserAndJobPositionsInbox($id, $type)
{
    return self::has('documents.categories')
         ->where('inboxable_id', $id)
         ->where('inboxable_type', $type)->get();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...