gpt4 book ai didi

php - Symfony2 从具有多对多关系的倒置实体中获取对象

转载 作者:可可西里 更新时间:2023-10-31 22:11:40 25 4
gpt4 key购买 nike

我的 Doctrine 实体关系存在问题。事情是这样的:

我有 2 个实体:文章和类别文章为主,类别为从

我想从文章中获取类别,或者从类别中获取文章。

我创建了一个 ManyToMany 关系:

class Article
{
/**
* @ORM\ManyToMany(targetEntity="Alpha\BlogBundle\Entity\Category", cascade={"persist"}, inversedBy="Article")
* @ORM\JoinTable(name="article_category")
*/
private $categories;

public function __construct(){
$this->categories = new \Doctrine\Common\Collections\ArrayCollection();

和类别实体:

class Category
{
/**
* @ORM\ManyToMany(targetEntity="Alpha\BlogBundle\Entity\Article", cascade={"persist"}, mappedBy="Category")
*/
private $articles;

public function __construct(){
$this->articles = new \Doctrine\Common\Collections\ArrayCollection();

在我的文章实体中,我还添加了以下内容:

public function addCategory(\Alpha\BlogBundle\Entity\Category $categories)
{
$this->categories[] = $categories;
$categories->addArticle($this);
return $this;
}

(第四行,$categories->addArticle($this);)

在我的 Controller 中:

public function ajouterAction($data = null, $id = null) {

// On récupère l'EM pour enregistrer en BDD
$em = $this->getDoctrine()->getManager();

// On définit une nouvel objet Article avec de nouveaux attributs
$article = new Article;
$article->setTitle('1er article !');
$article->setContent('Cupcake ipsum dolor sit amet ice cream tiramisu unerdwear.com. Caramels halvah lollipop apple pie soufflé. Tart lollipop soufflé candy tootsie roll sweet donut. Lemon drops danish I love icing I love. Candy canes cheesecake I love. I love tiramisu applicake. I love gingerbread soufflé sweet roll muffin. Cupcake liquorice gummi bears muffin chocolate jelly-o.');
$article->setAuthor('Toto');

// On définit une nouvel objet Category avec de nouveaux attributs
$category = new Category;
$category->setName('Poney');

$article->addCategory($category);

$em->persist($category);
$em->persist($article);

$em->flush();

return $this->render('AlphaBlogBundle:Blog:ajouter.html.twig');
}

最后,从类别中获取我的文章:

public function categoryAction($cat = null) {

$em = $this->getDoctrine()->getManager();

// Si cat est vide, on renvoit la liste complète des catégories
if (!isset($cat) || empty($cat) || $cat == null) {

$categories = $em->getRepository('AlphaBlogBundle:Category')->findAll();

return $this->render('AlphaBlogBundle:Blog:categories.html.twig', array(
'categories' => $categories
));
}
// Sinon on renvoit la liste des articles de la catégorie
else {
$category = $em->getRepository('AlphaBlogBundle:Category')->findOneBy(array('name' => $cat));
$articles = $category->getArticles();

return $this->render('AlphaBlogBundle:Blog:category.html.twig', array(
'articles' => $articles,
'category' => $category
//'name' => $name
));
}
}

在我看来,我可以看到我的类别名称,但文章没有显示,我有这个错误消息:

ContextErrorException:通知:未定义索引:/home/franck/www/alpha/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php 第 1036 行中的类别

如果有人能帮忙的话,我有点迷路了。

最佳答案

如下来自doctrine documentation :

mappedBy: This option specifies the property name on the targetEntity that is the owning side of this relation. Its a required attribute for the inverse side of a relationship.

inversedBy: The inversedBy attribute designates the field in the entity that is the inverse side of the relationship.

因此,尝试将 Article 类中的 inversedBy="Article" 更改为 inversedBy="articles" 并将 mappedBy="Category" 更改为mappedBy="categories" 在类别类中。

另见 this多对多双向示例。

希望这对您有所帮助。

关于php - Symfony2 从具有多对多关系的倒置实体中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com