gpt4 book ai didi

mysql - 在 Symfony2 中使用 Doctrine2 和外键

转载 作者:行者123 更新时间:2023-11-29 22:06:57 25 4
gpt4 key购买 nike

我有一个 MySQL 数据库(后来导入到 Doctrine 中),它通过外键链接 3 个不同的表。关系如下:多个A指向一个B,多个B指向一个C。对于我正在尝试创建的网页,我需要在关于A的页面上获取一些相关B的信息,同时将其分类为C.

这样想:A 是“dog_food”,B 是“company”,C 是“company_category”。也就是说,在展示不同种类狗粮的页面上,我需要展示生产公司的信息;我仅根据用户指定他们想要从哪类公司购买的方式来显示这些狗粮。

从 A 动态提取信息是微不足道的,因为存储库被提取并且行作为实体存在。假设,{{dog_food.price }} 将调用(如果在 for 循环中指定,这是 Twig 代码)单个实例的价格。

我已经阅读过有关 @OneToOne、@OneToMany 等注释的内容,但一直无法找到一种方法来轻松地在 Twig 模板中利用它们的效果。所有 3 个表的聚合实体和存储库作为变量存在于 Controller 中。值得一提的是,继续这个例子,B表中有一个companyID字段对应多个狗粮,还有一个categoryID与多个公司关联。

如果我想在价格上方列出公司名称会怎样?我如何在 Doctrine 以及 Twig 中访问该信息?

最佳答案

我会将您上面所说的内容翻译成如果我是您的话我会有效编写的代码:

因此,我假设,除了您定义的映射之外,您的公司类别实体称为“Company_category”,您的狗粮实体称为“Dog_food”。我会将 company_category 的 id 传递给 Controller ​​中的操作,然后,我将检索属于该 company_category 的所有公司,如下所示:

public function xyzAction($id){
$companies=$this->getDoctrine()->getRepository('XYZYourBundle:Company')
->findBy(array('company_category'=>$id));
//Hold on I will just complete it
}

然后我将从我的数据库中检索该公司存在于 $companies 中的所有狗粮对象,结果在第一行代码中返回,为此,我首先要:

1-定义我自己的标准:这将帮助您定义复杂、强大的条件并且易于使用。

2-使用我的条件过滤存储库的结果,this会有用的因此,让我们更新我们的操作:

public function xyzAction($id){

$companies=$this->getDoctrine()->getRepository('XYZYourBundle:Company')->findBy(array('company_category'=>$id));
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria->where($criteria->expr()->in('company',$companies));
$dogfoods=$this->getDoctrine()->getRepository('XYZYourBundle:Dog_food')->matching($criteria)
//Hold on I will just complete it
}

最后将我们的dogfood对象渲染到 Twig 模板:

public function xyzAction($id){

$companies=$this->getDoctrine()->getRepository('XYZYourBundle:Company')->findBy(array('company_category'=>$id));
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria->where($criteria->expr()->in('company',$companies));
$dogfoods=$this->getDoctrine()->getRepository('XYZYourBundle:Dog_food')->matching($criteria)
return $this->render('XYZYourBundle:test.html.twig', array(
'dogfoods'=>$dogfoods));
}

现在,让我们将用户放入 Twig 模板中,我们将迭代 $dogfoods 对象,并显示一些信息,假设您定义了所需的 getter 和 setter;

  {% for dogfood in dogfoods %}
{{dogfood.price}}
{{dogfood.company}}
{% endfor %}

编辑:您可以通过以下任一方式获取公司名称:

-实现一个 tostring 方法,返回公司名称并在 twig 中使用

{{dogfood.company}}

-在 Twig 中,使用

{{dogfood.company.name}}

希望这对您有帮助,如果有问题请告诉我。

关于mysql - 在 Symfony2 中使用 Doctrine2 和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32076802/

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