【问题标题】:How to use variable from mySQL DB in Doctrine?如何在 Doctrine 中使用 mySQL DB 中的变量?
【发布时间】:2017-09-12 14:23:56
【问题描述】:

我对教义有疑问。我的任务是从其他表中设置具有类别的新产品。类别名称是唯一的。类别和产品表是一对多关系。当我制作时:

        $brand = new Category();
        $brand->setBrand('Beers');

        $beer = new Product();
        $beer->setModel('Bavaria');
        $beer->setBrand($brand);
        $em = $this->getDoctrine()->getManager();
        $em->persist($brand);
        $em->persist($beer);
        $em->flush();

一切都好。但是当我使用其他型号名称(例如喜力)进行此查询时,我重复了品牌名称。我想拥有 1 个品牌名称,例如葡萄酒、伏特加、啤酒。如果在查询时存在,我不想每次都创建品牌名称。 感谢您的回答。

【问题讨论】:

  • 尝试测试品牌是否存在,如果是,则使用它,如果不创建它
  • 我认为在 Doctrine 中有一些方法,而不是 if。

标签: php sql symfony doctrine


【解决方案1】:

如果您想让用户在类别中进行选择,您可以使用带有 EntityType 的表单。

如果您想让用户输入名称并在类别不存在时创建类别,您可以这样做:

$newBrand = 'userInput';
$em       = $this->getDoctrine()->getManager();
$category = $em->getRepository('YouBundle:YouEntity')->findOneBy(array('brand' => $newBrand));
if ($category == null) {
    $category = new Category();
    $category->setBrand($newBrand);
    $em->persist($category);
} 
$beer = new Product();
$beer->setModel('Bavaria');
$beer->setBrand($category); // If you need to use $category in you view don't forget $category->addProduct($beer);
$em->persist($beer);
$em->flush();

PS : mySQL 有一个 create 或 update 指令,但我不建议在这里,因为您需要匹配所有字段。

【讨论】:

  • 不要忘记 Doctrine 映射。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多