0

我有两个实体类:房屋和汽车。

在 Entity House 类中我有方法:

<?php

namespace Acme\HouseBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * House
 */
class House {
//...
  public function getRandomCar()
  {
      $em = $this->getDoctrine()->getManager();
      $car = $em->getRepository('AcmeCarBundle:Car')->find(rand(0,100));

      return $car->getName();
  }
}

但我无法在我的 Entity House 课程中使用 Doctrine。我怎样才能做到?

4

1 回答 1

0

你需要getRandomCar在你的CarRepository(你必须创建它)中编写函数

一个简单的规则是永远不要在实体(汽车、房子......)中编写查询

阅读有关存储库的更多信息

Car.php

/**
 * @ORM\Table(name="car")
 * @ORM\Entity(repositoryClass="Acme\CarBundle\Entity\CarRepository")
 */
class Car 
{
}

CarRepository.php

class CarRepository extends EntityRepository  
{
    public function getRandomCar() 
    {
        $qb = $this->createQuery('c');
        $qb->where('c.id = :id')
            ->setParameters(array('id' => rand(0,100)))
            ->getQuery();

        return $qb->execute();
    }
}

然后在你的Controller,

$em = $this->getDoctrine()->getManager();
$car = $em->$em->getRepository('AcmeCarBundle:Car')->getRandomCar();
$car->getName();
于 2013-09-18T08:34:52.360 回答