我不确定标题是否属实。我很抱歉。但我想你会理解我的问题。
我试图从我的表格中选择两列。我有两张桌子,这些有关系。
第一个表的名称是:管理员(一些列 - >用户名和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();
答案 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();