Класс учения ".. \ .." не имеет ассоциации с именем "..." - PullRequest
3 голосов
/ 01 августа 2011

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

У меня есть 2 объекта: RokZaPrijavuProjekta И Predmet .

RokZaPrijavuProjekta:

/**
* @ORM\Table(name="rok_prijava_projekta")
* @ORM\Entity(repositoryClass="JP\AdminBundle\Repository\RokZaPrijavuProjektaRepository")
*/
class RokZaPrijavuProjekta
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var integer $id_predmet
 * @ORM\ManyToOne(targetEntity="Predmet")
 * @ORM\Column(name="id_predmet", type="integer")
 */
private $predmet;

/**
 * @var date $od
 * @ORM\Column(name="od", type="date")
 */
private $od;

/**
 * @var date $do
 * @ORM\Column(name="do", type="date")
 */
private $do;

/**
 * @var string $info
 * @ORM\Column(name="info", type="string", length=120)
 */
private $info;
}

Код объекта Predmet:

/**
 * @ORM\Table(name="predmeti")
 * @ORM\Entity(repositoryClass="JP\AdminBundle\Repository\PredmetRepository")
 */
class Predmet
{
/**
 * @var integer $id
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string $sifra
 * @ORM\Column(name="sifra", type="string", length=64)
 */
private $sifra;

/**
 * @var boolean $vidljiv
 * @ORM\Column(name="vidljiv", type="boolean")
 */
private $vidljiv;
}

Метод репозитория:

$q = $this->createQueryBuilder('r')
->select('rzpp')
->where('rzpp.predmet = :predmet')
->from('JPAdminBundle:RokZaPrijavuProjekta', 'rzpp')
->leftJoin("rzpp.predmet", "p")
->setParameter('predmet', $predmet)
->getQuery();

Как получатели, так и установщики для всех членов класса определены правильно.

Теперь у «RokZaPrijavuProjekta» есть ссылка на внешний ключ для «Predmet», поэтому многие из этих «RokZaPrijavuProjekta» могут иметь один и тот же «Predmet».

Я хочу создать для этой цели однонаправленное отношение ManyToOne, но получаю исключение:

Класс JP \ AdminBundle \ Entity \ RokZaPrijavuProjekta не имеет ассоциации с именем predmet

Я перебрал Документация к доктрине , но обнаружил, что это предпочтительный способ определения однонаправленного отношения многие-к-одному.

У вас есть идеи, что может быть проблемой здесь?


UPDATE

  • Добавлен код объекта Predmet ...
  • Добавлен метод репозитория

Большое спасибо!

С уважением, Йован

Ответы [ 3 ]

26 голосов
/ 20 августа 2011

Ну, прошлой ночью я снова столкнулся с той же проблемой.На этот раз я потратил некоторое время, чтобы выяснить, почему он так неожиданно начал работать в прошлый раз (во время моего вопроса выше).

Итак, итоговый результат и решение проблемы:

В моем классе сущностей у меня были и аннотации @Column и @ManyToOne, где я использовал @Column для определения имени столбца в базе данных и @ManyToOne для определения отношения.Дело в том, что вам нужно удалить @Column аннотацию и заменить ее на @JoinColumn, определив таким образом атрибуты name и referencedColumnName.Проверьте эти фрагменты:

Это не будет работать:

(с или без @JoinColumn)

/**
 * @var integer $file
 * @ORM\Column("name="id_file", type="integer")
 * @ORM\ManyToOne(targetEntity="File")
 */
private $file

Но это будет :

/**
 * @var integer $file
 * @ORM\ManyToOne(targetEntity="File")
 * @ORM\JoinColumn(name="id_file", referencedColumnName="id")
 */
private $file

Надеюсь, это кому-нибудь пригодится ...

Ура!

2 голосов
/ 01 августа 2011

Можете ли вы показать код объекта Predmet?

Или просто попробуйте этот код:

// RokZaPrijavuProjekta
/**
 * @ORM\ManyToOne(targetEntity="Predmet", inversedBy="rokzaprojects")
 */
protected $predmet;


//Predmet
/**
 * @ORM\OneToMany(targetEntity="RokZaPrijavuProjekta", mappedBy="predmet")
 */
protected $rokzaprojects;
1 голос
/ 07 марта 2017

Дополнительная информация, формат комментариев имеет значение

Я потратил несколько часов, чтобы узнать, что пропустил знак звездочки в комментариях

Это не сработает

/*
 * @ORM\OneToMany(targetEntity="\Custom\Models\ProductText", mappedBy="product", orphanRemoval=true, cascade={"persist","remove"})
 */
protected $texts;

однако это работает

/**
 * @ORM\OneToMany(targetEntity="\Custom\Models\ProductText", mappedBy="product", orphanRemoval=true, cascade={"persist","remove"})
 */
protected $texts;

обратите внимание на отсутствующую звездочку (*) в первой строке первого примера

...