[英]Custom query symfony2
我希望顯示與當前用戶(老師)具有相同課程ID的學生列表。
http://snag.gy/VOHJ3.jpg這是我的數據庫設計。
<?php
namespace Simple\ProfileBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Request;
class SecurityController extends Controller
{
public function loginAction(Request $request)
{
$session = $request->getSession();
// get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
return $this->render('SimpleProfileBundle:Security:login.html.twig', array(
// last username entered by the user
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error,
));
}
public function dumpStringAction()
{
$findStudents = $this->getUser()->getCourses();
$results = $this->_em
->createQuery("SELECT * FROM user where")
->getResult();
return $results;
}
return $this->render('SimpleProfileBundle:Security:dumpString.html.twig', array(
'findstudents'=> $findStudents));
}
}
有人知道我該怎么做嗎? 我當時在考慮自定義查詢,但是我不確定該怎么做?
干杯
首先,如果要使用自定義查詢,則應通過創建實體的存儲庫來實現。
例:
實體:
<?php
namespace YourName\YourBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* YourClass
*
* @ORM\Entity(repositoryClass="YourName\YourBundle\Entity\Repository\YourClassRepository")
* @ORM\Table(name="your_class")
*/
class YourClass
{
// your entity definition
}
然后,您必須創建實體存儲庫類:
<?php
namespace YourName\YourBundle\Entity\Repository;
use Doctrine\ORM\EntityRepository;
/**
* YourClassRepository
*/
class YourClassRepository extends EntityRepository
{
public function getStudentsByCourseID($courseId)
{
$qb = $this->_em->createQueryBuilder();
$qb
->select('student')
->from('YourNameYourBundle:YourClass', 'student')
->leftJoin('YourNameYourBundle:Course', 'course')
->where('course.id == :courseId');
$qb->setParameter('courseId', $courseId);
return $qb->getQuery()->getArrayResult();
}
然后,您可以在控制器中調用自定義查詢:
<?php
namespace Simple\ProfileBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Request;
class SecurityController extends Controller
{
public function loginAction(Request $request)
{
// your code here...
}
public function yourAction($courseID)
{
$repo = $this->getDoctrine()->getRepository('YourNameYourBundle:YourClass');
$students = $repo->getStudentsByCourseID($courseID);
return [
'students' => $students
];
}
}
我認為這就是您所需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.