Przeczytałem oficjalną dokumentację i mnóstwo wątków, ale wciąż nie znajduję rozwiązania dla mojej sytuacji. Mój przypadek jest bardzo prosty. Mam 2 podmioty: komentarze i słowa kluczowe dla nich. Jeden komentarz może zawierać wiele słów kluczowych, ale każde słowo kluczowe ma tylko jeden komentarz. Słowa kluczowe nie są unikalne w tabeli słów kluczowych. Postanowiłem więc, że jest to relacja jeden do wielu. Struktura Stoły są po prostu jak następuje:Problem zrozumienia mapowania relacji w doktrynie 2
słowa kluczowe
id int(11)
comment_id int(11)
text varchar(30)
komentarze
id int(11)
text text
Oto jak je odwzorowany:
/**
* @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;}
}
i jak stosując to tak:
$comments = $this->em->getRepository('comments')->findAll();
foreach($comments as $comment){
foreach($comment->getKeywords() as $keyword){
$keyword->getText();
}
}
i got to błędy:
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
Co jest nie tak? gdzie powinien zdefiniować comment_id? Czy moje mapowanie jest poprawne? Naprawdę utknąłem i potrzebuję pomocy, więc proszę, wszelkie rady są bardzo mile widziane.
co o 'comment_id'? jak ustawić relację między komentarzami i słowami kluczowymi? – Sadat
comment_id to pole w bazie danych w tabeli słów kluczowych o identyfikatorze komentarza, do którego należy to słowo kluczowe. Przypuszczam, że doktryna użyje go przy wyborze słów kluczowych do komentarzy. relacja jest taka: OneToMany (targetEntity = "słowa kluczowe", mappedBy = "comment_id") czy to prawda? – SET