Laravel: присоединиться к запросу с помощью Eloquent - PullRequest
0 голосов
/ 07 мая 2018

У меня есть пять таблиц, в которых мне нужно получить данные из всего этого. post,product,categories,attributes,post_attribute

У меня есть запрос в моей модели, в котором собраны все сообщения для одного продукта, и он содержит информацию о категориях и атрибутах. Запрос:

 Post::with(['product.categories.attributes'])->whereStatus("Active")->get();

Ответ:

 "PostDetails": [
    {
        "id": 153,
        "user_id": 3,
        "product_id": 1,
        "demand_or_supply": "Demand",
        "description": "This is a post description three",
        "image_one": null,
        "image_two": null,
        "image_three": null,
        "image_four": null,
        "status": "Active",
        "created_at": "2018-05-07 09:51:08",
        "updated_at": "2018-05-07 09:51:08",
        "product": {
            "id": 1,
            "title": "Diamond",
            "icon": null,
            "status": "Active",
            "created_at": "2018-04-27 18:46:28",
            "updated_at": "2018-04-27 18:46:28",
            "categories": [
                {
                    "id": 1,
                    "product_id": 1,
                    "title": "Shape",
                    "status": "Active",
                    "sort_order": 1,
                    "created_at": "2018-04-27 18:46:28",
                    "updated_at": "2018-04-27 18:46:28",
                    "attributes": [
                        {
                            "id": 1,
                            "product_id": 1,
                            "category_id": 1,
                            "parent_id": null,
                            "title": "Round",
                            "status": "Active",
                            "sort_order": 2,
                            "created_at": "2018-04-27 18:46:29",
                            "updated_at": "2018-04-27 18:46:29"
                        },
                        {
                            "id": 2,
                            "product_id": 1,
                            "category_id": 1,
                            "parent_id": null,
                            "title": "Princess",
                            "status": "Active",
                            "sort_order": 1,
                            "created_at": "2018-04-27 18:46:29",
                            "updated_at": "2018-04-27 18:46:29"
                        },
                        {
                            "id": 3,
                            "product_id": 1,
                            "category_id": 1,
                            "parent_id": null,
                            "title": "Oval",
                            "status": "Active",
                            "sort_order": 3,
                            "created_at": "2018-04-27 18:46:29",
                            "updated_at": "2018-04-27 18:46:29"
                        },
                        {
                            "id": 4,
                            "product_id": 1,
                            "category_id": 1,
                            "parent_id": null,
                            "title": "Kite",
                            "status": "Active",
                            "sort_order": 8,
                            "created_at": "2018-04-27 18:46:29",
                            "updated_at": "2018-04-27 18:46:29"
                        },
                        {
                            "id": 5,
                            "product_id": 1,
                            "category_id": 1,
                            "parent_id": null,
                            "title": "1-5",
                            "status": "Active",
                            "sort_order": 4,
                            "created_at": "2018-04-27 18:46:29",
                            "updated_at": "2018-04-27 18:46:29"
                        },
                        {
                            "id": 6,
                            "product_id": 1,
                            "category_id": 1,
                            "parent_id": null,
                            "title": "6-10",
                            "status": "Active",
                            "sort_order": 9,
                            "created_at": "2018-04-27 18:46:29",
                            "updated_at": "2018-04-27 18:46:29"
                        },
                        {
                            "id": 8,
                            "product_id": 1,
                            "category_id": 1,
                            "parent_id": null,
                            "title": "-2",
                            "status": "Active",
                            "sort_order": 10,
                            "created_at": "2018-04-27 18:46:29",
                            "updated_at": "2018-04-27 18:46:29"
                        },
                        {
                            "id": 9,
                            "product_id": 1,
                            "category_id": 1,
                            "parent_id": null,
                            "title": "+2 -4",
                            "status": "Active",
                            "sort_order": 7,
                            "created_at": "2018-04-27 18:46:29",
                            "updated_at": "2018-04-27 18:46:29"
                        },
                        {
                            "id": 10,
                            "product_id": 1,
                            "category_id": 1,
                            "parent_id": null,
                            "title": "+4 -6 1/2",
                            "status": "Active",
                            "sort_order": 6,
                            "created_at": "2018-04-27 18:46:29",
                            "updated_at": "2018-04-27 18:46:29"
                        }
                    ]
                },

В этой таблице есть еще одна таблица с именем post_attributes. Я храню attribute_id и product_id, которая принадлежит к attribute и product таблице.

Я хочу отфильтровать данные attributes, которые доступны только в таблице post_attributes и только для «продукта», доступного в таблице post_attributes с product_id и attribute_id. Как я могу это сделать?

1 Ответ

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

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

Post::with(['product.categories.attributes' => function($query) {
    // Eager load constraint
    $query->whereHas('post_attribute', function ($query) {
        $query->where('product_id', 1); // Filter by the joined data
    });
}])->whereStatus("Active")->get();

Надеждаэто тебе поможет.

...