Как отключить возврат ссылок на другие объекты в Symfony 4? - PullRequest
1 голос
/ 20 июня 2019

У меня есть несколько сущностей, которые связаны друг с другом в Symfony 4.

This is it

Таким образом, в принципе дом может иметь несколько спален и несколько кухонь,Каждая кухня может иметь несколько шкафов.Мой текущий дизайн - ввести идентификатор спальни, который затем будет искать все кухни, связанные с домом идентификатора этой спальни, а затем возвращать все шкафы, связанные с этими кухнями.

Это построитель запросов (который отлично работает):

    public function findCabinetsByBedroomId(Bedroom $bedroom)
    {
        return $this->createQueryBuilder('cabinet')
            ->join('cabinet.kitchen', 'kitchen')
            ->join('kitchen.house', 'house')
            ->join('house.bedroom', 'bedroom')
            ->addSelect('cabinet')
            ->andWhere('bedroom = :bedroom')
            ->setParameter('bedroom', $bedroom)
            ->getQuery()
            ->getResult();
    }

, которые возвращают список следующей формы:

[
    {
        "id": 1,
        "time": {
            "date": "2019-06-12 11:51:22.000000",
            "timezone_type": 3,
            "timezone": "UTC"
        },
        "productCategory": "Big",
        "kitchen": {
            "__initializer__": null,
            "__cloner__": null,
            "__isInitialized__": true,
            "house": {
                "__initializer__": null,
                "__cloner__": null,
                "__isInitialized__": true,
                "kitchen": {},
                "bedroom": {},
                "id": 555,
                "name": "someName"
            },
            "id": 55,
            "name": "kitchen1",
            "country": "US"
        }
    },
    {
        "id": 8888,
        "time": {
            "date": "2019-06-12 09:51:22.000000",
            "timezone_type": 3,
            "timezone": "UTC"
        },
        "productCategory": "small",
        "kitchen": {
            "__initializer__": null,
            "__cloner__": null,
            "__isInitialized__": true,
            "house": {
                "__initializer__": null,
                "__cloner__": null,
                "__isInitialized__": true,
                "kitchen": {},
                "bedroom": {},
                "id": 555,
                "name": "someName2"
            },
            "id": 2,
            "name": "anotherName",
            "country": "UK"
        }
    }
]

Я понимаю, что Docker автоматически добавляет магические геттеры для всех ассоциаций.Есть ли способ отключить это?Чтобы просто вернуть информацию о шкафах, как это:

[
    {
        "id": 1,
        "time": {
            "date": "2019-06-12 11:51:22.000000",
            "timezone_type": 3,
            "timezone": "UTC"
        },
        "productCategory": "Big",
    },
    {
        "id": 8888,
        "time": {
            "date": "2019-06-12 09:51:22.000000",
            "timezone_type": 3,
            "timezone": "UTC"
        },
        "productCategory": "small",
    }
]

Пользователь @alx попытался объяснить мне, как это сделать, в своем комментарии к моему предыдущему вопросу .Но я до сих пор не понимаю, если честно.

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

1 Ответ

1 голос
/ 21 июня 2019

Когда вы используете ->addSelect('cabinet'), вы получаете все данные от cabinet.Если вам нужны только определенные свойства, укажите их, используя вместо этого:

->select('cabinet.id, cabinet.time, cabinet.productCategory')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...