【问题标题】:Symfony2 Doctrine2 how to add object if not fetched from dbSymfony2 Doctrine2 如果没有从数据库中获取,如何添加对象
【发布时间】:2014-01-13 10:56:53
【问题描述】:

检查这个例子:http://symfony.com/doc/current/book/doctrine.html#fetching-objects-from-the-database

我得到的是:

$results = $applicationsRepo->findByInName($appInNames);

appInNames 是一个如下所示的数组:

array(
    app1_name => app1_name,
    app2_name => app2_name,
    app3_name => app3_name,
    ...
)

我想在找不到实体对象时创建它。如何检查app1_name是否返回,如果没有创建?

【问题讨论】:

  • 你的findByInName函数是什么样的?
  • 它看起来不像它的默认结构 findBy 您可以在我的情况下添加实体文件名称 inName 并按该字段名称搜索 fetch findByInName
  • 实体存在时您的代码是否正常工作?我可能错了,但对我来说findByInName 应该取inName 的值,而不是数组。你想达到什么目的?您不能以这种方式查询 or 条件。
  • 如果您想获取与 $appInNames 数组中的一个名称匹配的所有实体,请参阅下面的答案。

标签: php symfony doctrine-orm repository


【解决方案1】:

如果您需要获取具有inName 属性设置为app1_nameapp2_name 等的所有实体的数组,并且如果默认值不存在,则可以使用findOneBy 而不是findBy 并在结果为 NULL 时创建您的实体。

由于循环,可能不是最有效的方法,但它可以满足您的需求:

$results = array();
foreach($appInNames as $appInName) {
    $app = $applicationsRepo->findOneByInName($appInName);
    if(!isset($app)) {
        // Create you entity here
    }
    $results[$appInName] = $app;
}

更有效的方法可能是编写自定义存储库并使用 queryBuilder 添加所有 OR 条件。您将在一个查询中获取所有现有实体,然后必须解析结果以创建缺失的实体。

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多