Я прочитал официальную документацию и тонны потоков, но до сих пор не нашел решения для своей ситуации. Мой случай очень прост. У меня есть 2 объекта: комментарии и ключевые слова для них. Один комментарий может содержать много ключевых слов, но каждое ключевое слово - только для одного комментария. Ключевые слова не уникальны в таблице ключевых слов. Поэтому я решил, что это отношение «один ко многим». Таблицы структура просто нравится следующим образом:проблема понимание отношение отображение в доктрине 2
ключевые слова
id int(11)
comment_id int(11)
text varchar(30)
комментарии
id int(11)
text text
вот как я сопоставляются их:
/**
* @Entity
* @Table(name="comments")
**/
class Comments
{
/** @Id @Column(type="integer") */
private $id;
/** @Column(type="text") */
private $text;
/**
* @OneToMany(targetEntity="keywords", mappedBy="comment_id")
*/
private $keywords;
public function getText(){return $this->text;}
public function getId(){return $this->id;}
public function getKeywords(){return $this->keywords;}
}
/**
* @Entity
* @Table(name="keywords")
*/
class Keywords
{
/** @Id @Column(type="integer") */
private $id;
private $text;
public function getText(){return $this->text;}
public function getId(){return $this->id;}
}
и как использовать его, как это:
$comments = $this->em->getRepository('comments')->findAll();
foreach($comments as $comment){
foreach($comment->getKeywords() as $keyword){
$keyword->getText();
}
}
и получил эти ошибки:
Notice: Undefined index: comment_id in C:\web_includes\doctrine\ORM\Persisters\BasicEntityPersister.php on line 1096
Notice: Trying to get property of non-object in C:\web_includes\doctrine\ORM\Persisters\BasicEntityPersister.php on line 1098
Warning: Invalid argument supplied for foreach() in C:\web_includes\doctrine\ORM\Persisters\BasicEntityPersister.php on line 1098
Notice: Undefined index: comment_id in C:\web_includes\doctrine\ORM\PersistentCollection.php on line 168
Fatal error: Call to a member function setValue() on a non-object in C:\web_includes\doctrine\ORM\PersistentCollection.php on line 169
Что не так? где следует определять comment_id? Верно ли мое отображение? я действительно застрял и нуждаюсь в помощи, поэтому, пожалуйста, любые советы очень приветствуются.
, что о 'comment_id'? как вы устанавливаете отношения betn comments и ключевые слова? – Sadat
comment_id - это поле в базе данных в таблице ключевых слов, в которой есть идентификатор комментария, к которому относится это ключевое слово. Я полагаю, что доктрина будет использовать его при выборе ключевых слов для комментариев. Отношение такое же OneToMany (targetEntity = "keywords", mappedBy = "comment_id") Правильно ли это? – SET