Отношение доктрины записывает NULL в таблицу

Мой Item.orm.yml:

AppBundle\Entity\Item:
    type: entity
    manyToMany:
        categories:
            targetEntity: AppBundle\Entity\Category
            cascade: ['persist']
            inversedBy: items
            joinTable:
                name: item_category
                joinColumns:
                    item_id:
                        referencedColumnName: id
                inverseJoinColumns:
                    category_id:
                        referencedColumnName: id
    oneToMany:
        attributes:
            targetEntity: AppBundle\Entity\AttrValue
            mappedBy: item
            cascade: ['persist','remove']
    table: items
    repositoryClass: AppBundle\Repository\ItemRepository
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    fields:
        name:
            type: string
            length: 255

AttrValue.orm.yml:

AppBundle\Entity\AttrValue:
    type: entity
    manyToOne:
        item:
            targetEntity: AppBundle\Entity\Item
            inversedBy: attributes
            cascade: ['persist','remove']
            joinColumn:
                name: item_id
                referencedColumn: id
                nullable: false
        attribute:
            targetEntity: AppBundle\Entity\Attribute
            inversedBy: attrValues
            cascade: ['persist','remove']
            joinColumn:
                name: attribute_id
                referencedColumn: id
                nullable: false
    table: attr_value
    repositoryClass: AppBundle\Repository\AttrValueRepository
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    fields:
        value:
            type: string
            length: 255

Attribute.orm.yml:

AppBundle\Entity\Attribute:
    type: entity
    oneToMany:
            attrValues:
                targetEntity: AppBundle\Entity\AttrValue
                mappedBy: attribute
                cascade: ['persist','remove']
    table: attribute
    repositoryClass: AppBundle\Repository\AttributeRepository
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    fields:
        alias:
            type: string
            length: 255
        name:
            type: string
            length: 255

Когда я хочу отправить запрос POST в виде массива JSON, вроде бы все написано, но кроме одного поля: item_id, там написано NULL. Для десериализации я использую JMSSerializer. В чем может быть проблема? Геттеры и сеттеры сущностей являются стандартными. Массив JSON:

{
    "name": "Book",
    "categories": [
        {
            "id": 2
        },
        {
            "id": 11
        }
    ],
    "attributes": [
        {
            "value": "black",
            "attribute": {
                "alias": "color",
                "name": "color"
            }
        },
        {
            "value": "1",
            "attribute": {
                "alias": "price",
                "name": "price"
            }
        }
    ]
}

В таблице MySQL:

+----+---------+-------+--------------+
| id | item_id | value | attribute_id |
+----+---------+-------+--------------+
| 1 |    NULL | 6     |           8   |
| 2 |    NULL | black |           9   |
| 3 |    NULL | 6     |           10  |
| 4 |    NULL | bk    |           11  |
| 5 |    NULL | 1     |           12  |
+----+---------+-------+--------------+

Вероятно, это опечатка при копировании / вставке, но у вас есть объект Item, определенный дважды. Но проблема с нулем просто означает, что ваш сеттер никогда не вызывается. Это довольно распространенное заблуждение. Определение отношения для Doctrine не означает, что сеттеры вызываются автоматически.

Cerad 11.03.2018 15:26

@Cerad, извини, я ошибаюсь. Но как я могу вызвать сеттер в этой ситуации?

Dialkord 11.03.2018 15:36

Я не могу сказать многое из того, что вы опубликовали, но обычно в двунаправленных отношениях сеттер на одном конце должен вызывать сеттер на другом конце. Поищите немного. Этот вопрос возникает много раз.

Cerad 11.03.2018 15:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
3
38
0

Другие вопросы по теме