本文概述
- 1.为捆绑包中的自定义方法创建一个文件夹。
- 2.使用自定义方法创建一个类
- 3.根据你的映射样式激活存储库
- 4)重建实体
一个普通的, 理智的开发人员在每次需要该查询时都不想写它!这就是为什么我们将创建自定义方法的原因, 因为除了节省不必要的代码行之外, 还使我们的代码更具可维护性, 并且是一种好习惯。
1.为捆绑包中的自定义方法创建一个文件夹。我们将创建一个文件夹, 其中将包含带有用于存储库的自定义方法的类的文件夹, 建议在你包的根文件夹(控制器, 实体, 表单文件夹旁边)中创建该文件夹。该文件夹的名称为” 存储库” 。
2.使用自定义方法创建一个类【如何在Symfony 2中为Doctrine存储库创建自定义方法】现在, 我们需要使用用于存储库的自定义方法创建类, 它必须具有以下结构:
<
?phpnamespace myapp\myBundle\Repository;
// Declare the namespace with your bundle path and "/Repository" in the enduse Doctrine\ORM\EntityRepository;
// We need the Entity Repository/** * RegisterRepository * This class was generated by the Doctrine ORM. Add your own custom * repository methods below. */class mynameRepository extends EntityRepository // Give a name to your class{
// A simple count method that we will call in the controller like this : $total = $em->
getRepository('mybundle:Something')->
countSomething();
public function countSomething(){return$this->
getEntityManager()->
createQuery('SELECT COUNT(a) FROM myBundle:Something a')->
getSingleScalarResult();
}}
3.根据你的映射样式激活存储库众所周知, 在带有符号的symfony 2中创建实体的方法不止一种。根据你的首选方法, 你将需要通过以下方式激活类:
- A)标注方法
// The entity should be in : src/myapp/myBundle/Entity/Something.php/** * @ORM\Entity(repositoryClass="myapp\myBundle\Repository\mynameRepository")//Here goes the namespace of our custom methods class with the name of the class in the end (check step 2 namespace) */class Something{// ..}
- B)没有注释方法
myapp\myBundle\Entity\Something: # This already existtype: entity # This already existtable: something # This already existrepositoryClass: myapp\myBundle\Repository\mynameRepository # Add the custom repository class path to the orm.yml file
4)重建实体只需对你的捆绑包运行主义的generate:entites命令
php app/console doctrine:generate:entities myBundle
如果你正确完成了所有操作, 则可以从存储库中调用自定义方法。如果你使用的是自定义存储库类, 则仍然可以正常使用默认查找程序方法, 例如find()和findAll()。
推荐阅读
- 使用C#进行语音合成,让你的应用说话
- TemplateMonster的Shopify会员资格(以99%的折扣价批量获取高级主题)
- 在Symfony 3中使用dhtmlxScheduler创建事件日历(计划程序)
- composer install,composer update和composer require之间有什么区别
- Codelobster(免费的PHP,HTML,CSS,JavaScript编辑器(IDE))
- node app.use()src表示local,dist表示prod
- Android Studio(添加文件后如何“刷新”())
- Android Grid Layout Cardview项目仅在屏幕顶部可见
- ApplicationMaster退出代码杀死的容器是143