我在PieceRepository中实现了一个函数,但是我无法使用它。我在控制器中使用它时出现此错误:
未定义的方法' FindAllDetailsPieces'。方法名称必须以findBy或findOneBy!
开头
这是我的ProductRepository
文件:
use Doctrine\ORM\EntityRepository;
class PieceRepository extends EntityRepository
{
public function FindAllDetailsPieces($reference)
{
$query = $this->getDoctrine()
->getManager()
->createQuery(
'SELECT p, c FROM AppBundle:Piece p
JOIN p.Media m
JOIN p.Caracteristique c
JOIN p.Fabricant f
WHERE p.idPiece = :reference'
)->setParameter('reference', $reference);
try {
return $query->getResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
}
这是我使用方法的地方:
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$piece = new Piece(); //Ligne modifier
$formRef = $this->createForm(ReferenceType::class, $piece);
$formRef->handleRequest($request);
if ($formRef->isSubmitted() && $formRef->isValid()) {
$data = $formRef->get('reference')->getData();
var_dump($data);
$repository = $em->getRepository('AppBundle:Piece');
$RechPieces = $repository->FindAllDetailsPieces($data);
var_dump($RechPieces);
return $this->render('default/result_ref_search.html.twig', array(
'RechPieces' => $RechPieces
));
// return $this->redirectToRoute('result_ref_search');
}
我在实体classe
中添加了注释 * @ORM\Entity(repositoryClass="AppBundle\Repository\PieceRepository")
答案 0 :(得分:0)
您必须在实体
中设置存储库类/**
* @ORM\Entity(repositoryClass="PieceRepository")
*/
然后在你的控制器中:
$em->getRespository(YourEntity::class)->FindAllDetailsPieces($reference);
如果仍然无法正常工作,请删除元数据缓存(在Symfony中使用ca:cl命令,或删除整个缓存目录...)
答案 1 :(得分:0)
您可能忘记将映射添加到Product
实体
use Doctrine\ORM\Mapping as ORM;
/**
* Product
*
* @ORM\Table(name="product")
* @ORM\Entity(repositoryClass="MyBundle\Repository\ProductRepository")
*/
class Product
{
}