Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在模型中的何处放置数据库查询?(Symfony框架)_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php 在模型中的何处放置数据库查询?(Symfony框架)

Php 在模型中的何处放置数据库查询?(Symfony框架),php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我不熟悉PHP编程和Symfony。英语不是我的母语很抱歉,如果我的写作听起来很奇怪 我有两个实体:文章和类别,其中每篇文章都有一个类别。我需要显示我在给定类别中有多少篇文章: 类别------------N° 车辆------------------4 电子-------------------20 食物-----------------15 家具-----------------8 我用条令为两个实体制作了CRUD文件 php app/console doctrine:generate:c

我不熟悉PHP编程和Symfony。英语不是我的母语很抱歉,如果我的写作听起来很奇怪

我有两个实体:文章类别,其中每篇文章都有一个类别。我需要显示我在给定类别中有多少篇文章:

类别------------N°

车辆------------------4

电子-------------------20

食物-----------------15

家具-----------------8

我用条令为两个实体制作了CRUD文件

 php app/console doctrine:generate:crud 
正如我所说的,问题是我想显示一个表,其中包含一个类别的属性(名称、描述等)以及库存中有多少物品

SQL查询非常简单:

SELECT count(*) FROM Articles a WHERE a.id_category = $id_category
把它放在哪里?!我很困惑,不想破坏最佳实践规则。
条令生成了大量文件:ArticleController.php、ArticleType.php(表单)和视图的所有.twig。类别也一样。

在服务层中创建CategoryManager类,并在其中处理任何业务逻辑。您可以通过依赖项注入将路由器传递给它

例如,CategoryManager将有一个getUrl(Article$Article)方法,该方法将使用路由器实例(通过_构造或单独的setter方法注入)根据$Article的属性生成Url,并返回它

此方法将确保您的业务逻辑不会污染视图或控制器层


选中此链接

在服务层中创建CategoryManager类,并在其中处理任何业务逻辑。您可以通过依赖项注入将路由器传递给它

例如,CategoryManager将有一个getUrl(Article$Article)方法,该方法将使用路由器实例(通过_构造或单独的setter方法注入)根据$Article的属性生成Url,并返回它

此方法将确保您的业务逻辑不会污染视图或控制器层


选中此链接

在服务层中创建CategoryManager类,并在其中处理任何业务逻辑。您可以通过依赖项注入将路由器传递给它

例如,CategoryManager将有一个getUrl(Article$Article)方法,该方法将使用路由器实例(通过_构造或单独的setter方法注入)根据$Article的属性生成Url,并返回它

此方法将确保您的业务逻辑不会污染视图或控制器层


选中此链接

在服务层中创建CategoryManager类,并在其中处理任何业务逻辑。您可以通过依赖项注入将路由器传递给它

例如,CategoryManager将有一个getUrl(Article$Article)方法,该方法将使用路由器实例(通过_构造或单独的setter方法注入)根据$Article的属性生成Url,并返回它

此方法将确保您的业务逻辑不会污染视图或控制器层


使用Symfony2+Doctrine2时,请选中此链接

  • 不要太在意数据库。考虑持久数据对象,即所谓的实体,让条令来处理它们。不过,要花一些时间来清晰地定义这些对象之间的关系

  • 忘掉“MVC”这个术语吧。MVC是一个相当抽象的概念,现实中的事情更加复杂。Fabian(SF的首席开发人员)对这个主题有一个很好的总结:


  • 如果您想知道在Symfony捆绑包中放什么,请阅读这篇食谱文章:

    当使用Symfony2+Doctrine2时

  • 不要太在意数据库。考虑持久数据对象,即所谓的实体,让条令来处理它们。不过,要花一些时间来清晰地定义这些对象之间的关系

  • 忘掉“MVC”这个术语吧。MVC是一个相当抽象的概念,现实中的事情更加复杂。Fabian(SF的首席开发人员)对这个主题有一个很好的总结:


  • 如果您想知道在Symfony捆绑包中放什么,请阅读这篇食谱文章:

    当使用Symfony2+Doctrine2时

  • 不要太在意数据库。考虑持久数据对象,即所谓的实体,让条令来处理它们。不过,要花一些时间来清晰地定义这些对象之间的关系

  • 忘掉“MVC”这个术语吧。MVC是一个相当抽象的概念,现实中的事情更加复杂。Fabian(SF的首席开发人员)对这个主题有一个很好的总结:


  • 如果您想知道在Symfony捆绑包中放什么,请阅读这篇食谱文章:

    当使用Symfony2+Doctrine2时

  • 不要太在意数据库。考虑持久数据对象,即所谓的实体,让条令来处理它们。不过,要花一些时间来清晰地定义这些对象之间的关系

  • 忘掉“MVC”这个术语吧。MVC是一个相当抽象的概念,现实中的事情更加复杂。Fabian(SF的首席开发人员)对这个主题有一个很好的总结:


  • 如果您想知道在Symfony捆绑包中放什么,请阅读这篇食谱文章:

    本着直接回答您问题的精神:您需要的是一个,在本例中是一个
    文章存储库

    e、 g。 ArticleRepository.php

    namespace ACME\DemoBundle\Article;
    
    use Doctrine\ORM\EntityRepository;
    
    class ArticleRepository extends EntityRepository
    {
        public function countForCategory($id)
        {
            $result= $this->createQueryBuilder('a')
                ->join('a.category', 'c')
                ->where('c.category_id = :id')
                ->setParameter('id', $id)
                ->select('count(a')
                ->getQuery()
                ->getSingleScalarResult();
    
            return $result;
        }
    }
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="article")
     * @ORM\Entity(repositoryClass="ACME\DemoBundle\Entity\ArticleRepository")
     */
    class Article
    {
    /// etc...
    
    然后设置文章实体以使用该文章存储库

    Article.php

    namespace ACME\DemoBundle\Article;
    
    use Doctrine\ORM\EntityRepository;
    
    class ArticleRepository extends EntityRepository
    {
        public function countForCategory($id)
        {
            $result= $this->createQueryBuilder('a')
                ->join('a.category', 'c')
                ->where('c.category_id = :id')
                ->setParameter('id', $id)
                ->select('count(a')
                ->getQuery()
                ->getSingleScalarResult();
    
            return $result;
        }
    }
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="article")
     * @ORM\Entity(repositoryClass="ACME\DemoBundle\Entity\ArticleRepository")
     */
    class Article
    {
    /// etc...
    
    然后,您可以在例如您的控制器中获取实体的存储库(尽管如其他地方所建议的,您可以将其隐藏在某种服务中,以避免用业务逻辑填充您的控制器;它只需要以某种方式从中访问即可)