Отображение отношений один ко многим

0

У меня есть два объекта - магазин и продукт. В одном магазине может быть много продуктов, но на одном продукте всегда есть только один магазин.

class Shop {
/**
     * @var integer
     *
     * @ORM\Column(name="shop_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $shopId;
/**
     * @var \Doctrine\Common\Collections\ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="Product", mappedBy="shop")
     */
    private $products;

    public function __construct()
    {
        $this->products = new ArrayCollection();
    }
}

class Product {
/**
     * @var integer
     *
     * @ORM\Column(name="product_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $productId;

    /**
     * @ORM\ManyToOne(targetEntity="Shop", inversedBy="products")
     * @ORM\JoinColumn(name="shop_id", referencedColumnName="product_id")
     */
    private $shop;
}

Когда я запускаю веб-сайт, я тем не менее получаю сообщение об ошибке, что product_id является неопределенным индексом в vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 1778. Что не так?

  • 0
    Не могли бы вы опубликовать схему БД для таблицы Product ?
  • 0
    В магазине есть столбец shop_id, а в таблице Product - столбцы product_id и shop_id.
Показать ещё 1 комментарий
Теги:
doctrine2

2 ответа

1

Вероятно, вам нужно ссылаться на поле shopId в вашем объекте Product. Также обратите внимание, что вы должны использовать имена объектов сущностей, а не имена столбцов в таблице DB.

/**
 * @ORM\ManyToOne(targetEntity="Shop", inversedBy="products")
 * @ORM\JoinColumn(name="shop_id", referencedColumnName="shopId")
 */
private $shop;

PS Для проблем с отображением Symfony command doctrine:schema:validate может быть полезна.

  • 0
    shop_Id это не должно ссылаться на shop_Id ?
  • 0
    Или shop_id ??
Показать ещё 7 комментариев
0

У вас нет столбца product_id в таблице магазина. Я думаю, что имя вашего имени shop_id также может вызывать конфликт с значением referenceColumnName. Поэтому измените имя столбца id магазина только на Id.

Затем измените значение referenceColumnName на идентификатор (магазины).

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $shopId;

/**
 * @ORM\ManyToOne(targetEntity="Shop", inversedBy="products")
 * @ORM\JoinColumn(name="shop_id", referencedColumnName="id")
 */
private $shop;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню