簡體   English   中英

自定義查詢symfony2

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM