在联接表原则2中选择一列


selecting a column in join table doctrine 2

我不确定标题是否正确。我对此感到非常抱歉。但我想你会理解我的问题的。

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

第一个表的名称是:Admins(几列->用户名和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();

发动机,

您需要执行内部联接。

这就是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:条令查询语言,也是一个很好的资源!

如果你有任何问题,请告诉我!

试试这个引擎。。您必须为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();