选择连接表原则2中的列

时间:2014-10-20 23:46:31

标签: php mysql symfony doctrine-orm

我不确定标题是否属实。我很抱歉。但我想你会理解我的问题。

我试图从我的表格中选择两列。我有两张桌子,这些有关系。

第一个表的名称是:管理员(一些列 - >用户名和bla bla bla)

第二个表的名称是:Auths(2列 - > id和名称)

(他们有这样的关系 - > Admins.auth - Auths.id)

我必须选择Admins.username和Auths.name。

我试过这段代码

$repository = $this->getDoctrine()
->getRepository('dbBundle:Admins');

$query = $repository->createQueryBuilder('a')
->addSelect('a.username')
->addSelect('au.name')
->leftJoin('a.auth','au','WITH','a.username=:username')
->setParameter('username', $userName)
->getQuery();

$products = $query->getResult();

但它不起作用。

但是,此代码工作正常。

$repository = $this->getDoctrine()
->getRepository('dbBundle:Admins');

$query = $repository->createQueryBuilder('a')
->addSelect('a.username')
->addSelect('au.name')
->leftJoin('a.auth','au')
->getQuery();

$products = $query->getResult();

解决问题: 首先我的主要问题是错误的参数名称,我的意思是得到像这样的参数

$userName = $request->query->get('username');

但是我发布它像userName那样错误,因为它存在区分大小写。

在我解决了结果后有2行,但它必须只有一行。

所以在这之后我使用innerJoin作为@ 157说。

这是我的最终代码,它的工作......

$repository = $this->getDoctrine()
    ->getRepository('dbBundle:Admins');

$query = $repository->createQueryBuilder('a')
    ->addSelect('a.username')
    ->addSelect('au.name')
    ->innerJoin('a.auth','au','WITH','a.username=:username')
    ->setParameter('username', $userName)
    ->getQuery();

2 个答案:

答案 0 :(得分:2)

恩金,

您需要执行inner Join

这是您在SQL中构建查询的方式:

SELECT Admins.username, Auths.id, Auths.name
FROM Admins
INNER JOIN Auths
ON Admins.username=Auths.name

基于此,这就是你的php看起来的样子:

<?php
  $con = mysql_connect("localhost","root","root");
  if (!$con) {
  die('Could not connect: ' . mysql_error());
  }

  mysql_select_db("test", $con);
  $result = mysql_query("SELECT Admins.username, Auths.id, Auths.name FROM Admins INNER JOIN Auths ON Admins.username=Auths.name");
  echo "<table border='1'>
  <tr>
  <th>Username</th>
  <th>ID</th>
  <th>Name</th>
  </tr>";
  while ($row = mysql_fetch_array($result)) {
  echo "<tr>";
  echo "<td>" . $row['username'] . "</td>";
  echo "<td>" . $row['id'] . "</td>";
  echo "<td>" . $row['name'] . "</td>";
  echo "</tr>";
  }
  echo "</table>";

  mysql_close($con);
?>

以下是如何在php中构建DQL查询:

  Doctrine_Query::create()
    ->select('a.username, au.id, au.name')
    ->from('Admins a')
    ->innerJoin('a.Auths au');

 echo $q->getSqlQuery();

DQL: Doctrine Query Language,也是一个很好的资源!

如果您有任何疑问,请与我们联系!

答案 1 :(得分:0)

试试这个Engin ..你必须为Admins实体提供正确的路径。 (应用程序\实体\管理员)

//in zf2 controller 
$em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');

$dql = "SELECT a.username,au.name
    FROM Application\Entity\Admins a
        JOIN a.auth au
        WHERE au.username=:userName";

$query = $em->createQuery($dql);
$query->setParameter('userName', $userName);

$products = $query->getResult();