Php 在模型中的何处放置数据库查询?(Symfony框架)
我不熟悉PHP编程和Symfony。英语不是我的母语很抱歉,如果我的写作听起来很奇怪 我有两个实体:文章和类别,其中每篇文章都有一个类别。我需要显示我在给定类别中有多少篇文章: 类别------------N° 车辆------------------4 电子-------------------20 食物-----------------15 家具-----------------8 我用条令为两个实体制作了CRUD文件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 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时,请选中此链接
如果您想知道在Symfony捆绑包中放什么,请阅读这篇食谱文章:当使用Symfony2+Doctrine2时
如果您想知道在Symfony捆绑包中放什么,请阅读这篇食谱文章:当使用Symfony2+Doctrine2时
如果您想知道在Symfony捆绑包中放什么,请阅读这篇食谱文章:当使用Symfony2+Doctrine2时
如果您想知道在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...
然后,您可以在例如您的控制器中获取实体的存储库(尽管如其他地方所建议的,您可以将其隐藏在某种服务中,以避免用业务逻辑填充您的控制器;它只需要以某种方式从中访问即可)