Symofiny2,实体对象的Perfom标准

时间:2017-01-04 06:27:48

标签: symfony doctrine-orm bundle

我正在研究Symfony项目。我从Bundle获得商店列表。在下面的控制器动作中,我想知道结果的来源。

检查Snippet" EducateToolsBundle:Stores"在下面的代码中。

myAction (){
    $stores = c2gr($this, 'EducateToolsBundle:Stores')->findBySelectOption(true); // Where can i Find/change the Data of stores.
    $userLocations = array();
    foreach ($stores as $store) {
        $userLocations[] = $store->getId();
    }
}

1 个答案:

答案 0 :(得分:2)

我不确定c2gr是什么,所以我会假设它是一个自定义函数,可以获取你的学说资源库。 Simmilar对此:

$repo = $this->get('doctrine.orm.entity_manager')->getRepository('EducateToolsbundle:Stores');
$stores = $repo->findBySelectOption(true);

结果将来自您正在使用的数据库,无论是MySQL,Postgres,MongoDB还是其他。

如果您想更改商店,可以通过调用商店实体上的设置器来代码执行此操作(您必须检查您的实体以查看实际存在的商家):

foreach ($stores as $store) {
    // Assuming that a Store has a SetLocation method that takes a string
    $store->setLocation('Las Vegas');
}

如果您只是需要快速更改数据而不想编写代码,则需要访问数据库。

来自评论的

更新

findBySelectOption是Doctrine在SQL中执行WHERE子句的方式。因此,调用findBySelectOption(true)将大致转换为:

SELECT * FROM Stores WHERE SelectOption = true;

如果您要查找LOCTYPE = 9的商店,则可以将findBySelectOption(true)替换为:

findBy(['selectOption' => true, 'LOCTYPE' => 9])

将转换为:

SELECT * FROM Stores WHERE SelectOption = true AND LOCTYPE = 9;

注意:您必须检查商店实体,找到SelectOptionLOCTYPE的正确大小写,否则可能无效。 即。商店的归属是LOCTYPEloctype还是LocType

更新2 如果你想找到不相等的,例如:

WHERE LOCTYPE != 9

然后你必须在查询构建器上做一些额外的工作。请参阅this question