Sonata Admin многие ко многим с формой атрибутов

Я использую 4 сущности:

  1. переводчик
  2. язык
  3. переводчик_язык
  4. сайт

Переводчик может иметь много языков. У языков может быть много переводчиков. Сайту может быть назначена пара переводчик/язык.

Поэтому я был вынужден создать translation_language, даже если внутри нет «настоящего атрибута».

class Language {

/**
 * @var \XX\TranslateBundle\Entity\TranslatorLanguage
 * 
 * @ORM\OneToMany(targetEntity="TranslatorLanguage", mappedBy="language")
 */
private $translators;

xx

class Translator {
/**
     * @var XX\TranslateBundle\Entity\TranslatorLanguage
     * 
     * @ORM\OneToMany(targetEntity="TranslatorLanguage", mappedBy="translator")
     */
    private $languages;

xx

class TranslatorLanguage
{

    /**
     * @var XX\TranslateBundle\Entity\Translator
     *  
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Translator", inversedBy="languages")
     * @ORM\JoinColumn(name="translatorID", referencedColumnName="ID", nullable=false)
     */
    private $translator;

    /**
     * @var XX\TranslateBundle\Entity\Language
     *  
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Language", inversedBy="translators")
     * @ORM\JoinColumn(name="languageID", referencedColumnName="ID", nullable=false)
     */
    private $language;


    /**
     * @var XX\TranslateBundle\Entity\TranslatorSite
     * 
     * @ORM\OneToMany(targetEntity="TranslatorSite", mappedBy="translatorLanguage")
     */
    private $translatorSites;

Сопоставление в порядке ([Mapping] OK — файлы сопоставления верны.)

С отображением ManyToMany я мог бы сделать

$formMapper->add('languages', null,
                        array('required' => false, 'expanded' => true))

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

Я действительно не хочу создавать переводчикязыкАдминистратор, потому что я не хочу, чтобы форма была одинаковой, исходящей от переводчика или языка (как это можно сделать с помощью простого сопоставления многие ко многим)

Нужно ли связывать запрос и шаблон с showMapper? Или я пропустил что-то легкое?


person copndz    schedule 24.05.2013    source источник
comment
общий вопрос: почему бы вам не создать отношения «многие ко многим» между языком и переводчиком и не добавить сайты в свой переводчик?   -  person Nicolai Fröhlich    schedule 24.05.2013
comment
Поскольку это не будет означать одно и то же, я думаю, я хочу связать ассоциации переводчика/языка с сайтом, а не с переводчиком со всеми его языками.   -  person copndz    schedule 27.05.2013
comment
тогда вы должны создать многие ко многим между переводчиком -> язык и стороной и переводчиком -> язык. у переводчика могут быть языки, которые он может или может переводить, на сайте могут быть разные языки и разные переводчики.. нет необходимости в четвертом объекте TranslatorSite, это только усложняет ситуацию :)   -  person Nicolai Fröhlich    schedule 27.05.2013
comment
Я использую устаревшую БД, поэтому у меня нет выбора, но я согласен с вами в том, что это не идеальная архитектура. Проблема в том, что я не знаю, возможно ли и как (если возможно) связать отношение, которое не является сущностью.   -  person copndz    schedule 27.05.2013
comment
пожалуйста, сформулируйте правильный вопрос - я не могу понять, чего вы действительно хотите :) Например, как я могу создать форму со следующими функциями, используя администратор сонаты ...   -  person Nicolai Fröhlich    schedule 27.05.2013
comment
Мое отношение, язык-переводчик, это ManyToMany без атрибута. Мое отношение, сайт/язык-переводчик, тоже ManyToMany. Но это невозможно (с отображением доктрины и моими знаниями) связать объект (сайт) с отношением между двумя объектами (языком-переводчиком). Итак, каков обходной путь для достижения этих отношений?   -  person copndz    schedule 27.05.2013


Ответы (1)


Я нашел очень хороший и понятный пост на эту тему, надеюсь, он мне очень поможет, как помог мне: http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-связь-с.html

person copndz    schedule 30.05.2013