Задать вопрос
Ответы пользователя по тегу Doctrine ORM
  • Как лучше организовать структуру таблиц?

    vistoyn
    @vistoyn
    программист
    Поля:
    id - ID комментария
    user_id - ID пользователя
    comment - Текст комментария
    type - Тип комментария
    foreign_id - Внешний ключ

    type Сделать как константы в Entity

    class Comment{
    	
    	const TYPE_BOOK = 1;
    	const TYPE_AUTHOR = 2;
    	const TYPE_PUBLISHER = 3;
    
    	/**
    	 * @var bigint
    	 *
    	 * @ORM\Column(name="id", type="bigint")
    	 * @ORM\Id
    	 * @ORM\GeneratedValue(strategy="AUTO")
    	 */
    	public $id;
    	
    	
    	/**
    	 * @var bigint
    	 *
    	 * @ORM\Column(name="user_id", type="bigint")
    	 */
    	public $user_id;
    	
    	
    	/**
    	 * @var string
    	 *
    	 * @ORM\Column(name="comment", type="text")
    	 */
    	public $comment;
    	
    	
    	/**
    	 * @var smallint
    	 *
    	 * @ORM\Column(name="type", type="smallint")
    	 */
    	public $type;
    	
    	
    	/**
    	 * @var bigint
    	 *
    	 * @ORM\Column(name="foreign_id", type="bigint")
    	 */
    	public $foreign_id;
    }
    
    $comment = new Comment();
    $comment->user_id = 37;
    $comment->comment = 'комментарий';
    $comment->type = Comment::TYPE_BOOK;
    $comment->foreign_id = $book->id;


    В данном случае у вас не будут связей, но они не особо то и нужны, и можно обойтись без них.
    Комментарии же все равно выводятся для книги, автора, издательства.
    Т.е. всегда указан type и foreign_id в запросе select.
    Если нужно вывести вообще все комментарии, то делаете left join и фильтр: вывести комментарии отдельно по Книгам, авторам и издательствам
    Ответ написан
    Комментировать
  • Как лучше реализовать связь One-To-One в MySQL (Symfony3, Doctrine ORM)?

    vistoyn
    @vistoyn
    программист
    1. В первом варианте есть ошибки:
    - Если вы получите запись из таблицы additional_entity_N непонятно будет к какому main_entity эта запись относиться, чтобы узнать надо делать дополнительный запрос к main_entity.
    - В таблицах additional_entity_N могут существовать записи, которые не относятся ни к одной записи из main_entity.
    - Легко запутаться при отладке БД, потому что id во всех 4х таблицах разные.
    - Чтобы добавить новый additional_entity_N вам нужно будет создать запись additional_entity_N, а затем изменить значения в main_entity.
    - И что вы будете делать, если вы создали запись в таблице additional_entity_1, а в main_entity уже указан id additional_entity_1_id?

    2. Во втором варианте у вас ошибки:
    - У вас связь 1-ко-многим, а не один к одному.
    - У таблиц additional_entity_N автоинкремент не нужен, поле id нужно убрать.
    - Primary key в таблицах additional_entity_N должен быть main_entity_id.
    - Во всех 4х таблицах должен быть одинаковый ID Primary key.

    3. Если исправить ошибки во втором варианте, то корректнее использовать его.
    Ответ написан
    Комментировать