由于遗留原因,我有一个用于多种用途的表。只有行的子集与我正在编写的实体相关。标准很简单,只需检查'project'
字段以获取特定值。
而不是重新实现find,findAll,findByName,findByID,findBy ....只需通知doctrine将单个条件附加到它们全部。如果没有重新实现每一个发现,这是否可能?*
或者也许它可以在情人级别上完成?
更新
答案 0 :(得分:2)
易于使用的解决方案是使用您的自定义Repository
功能创建find
。
然后,如果您的所有实体都有特定的Repository
,请从您的实体(包含自定义Repository
方法)延伸(find
),否则(您没有)每个实体Repository
),使用repositoryClass
注释的@ORM\Entity
选项将存储库分配给您的所有实体,如:
@ORM\Entity(repositoryClass="YourMainRepository")
否则,如果您不想在实体中放置任何存储库,请覆盖整个默认存储库并自定义find方法。
由于特殊需要,我已经使用了最后一个选项,我也邀请您查看以下问题:
Abstract repository and @Entity annotation inheritance
查看包含所有必需步骤的要点的解决方案,以覆盖默认的doctrine存储库。
答案 1 :(得分:1)
<强>实体强>:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Phrase
*
* @ORM\Table(name="User")
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*/
class User
{
/**
* @var int
*
* @ORM\Column(name="id", type="bigint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
.............................................................
.............................................................
.............................................................
您的存储库:
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
/** For example **/
public function getByName($name)
{
$qb = $this->createQueryBuilder('u')
->where('u.name = :name')->setParameter('name', $name)
->andWhere('u.lastname LIKE :name')->setParameter('lastname', '%'.$name.'%');
$query = $qb->getQuery();
return $query->getResult();
}
}
在您的控制器中:
/**
* @Route("/", name="index")
*/
public function indexAction(Request $request)
{
$userRepository = $this->getDoctrine()->getRepository('AppBundle:User');
$userName = $userRepository->getByName($name);
............................................... ................................... .................................................. ................................