我对一个简单的请求有些麻烦,他的行为非常奇怪:
$villes = $this
->createQueryBuilder('v')
->getQuery()
->getResult();
foreach ($villes as $value) {
$v = $this->_em->createQuery('
SELECT v
FROM Btp\UserProBundle\Entity\Ville v
WHERE GEO(v.lat = :latitude, v.lng = :longitude) <= :r
')
->setParameter('latitude', $lat)
->setParameter('longitude', $lng)
->setParameter('r', $value->getRayon()) // 20
->getResult();
}
问题是,当我硬编码&#34; 20&#34;在setParam中为&#39; r&#39;,查询返回正确的答案。 但是当我传递变量$ value-&gt; getRayon()(也等于20)时,请求什么也没找到。我不明白它是如何可能的......
编辑:查询生成的SQL:
string(341) "
SELECT v0_.id AS id0, v0_.nom AS nom1, v0_.lat AS lat2, v0_.lng AS lng3, v0_.rayon AS rayon4, v0_.slug AS slug5, v0_.nb_pro AS nb_pro6
FROM villes v0_
WHERE ((ACOS(SIN(? * PI() / 180) * SIN(v0_.lat * PI() / 180) + COS(? * PI() / 180) * COS(v0_.lat * PI() / 180) * COS((? - v0_.lng) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344) <= ?
"
EDIT2:好的,所以我在工具栏中找到了查询,而你们所有人都是对的,占位符具有很好的价值:
SELECT
v0_.id AS id0,
v0_.nom AS nom1,
v0_.lat AS lat2,
v0_.lng AS lng3,
v0_.rayon AS rayon4,
v0_.slug AS slug5,
v0_.nb_pro AS nb_pro6
FROM
villes v0_
WHERE
(
(
ACOS(
SIN(
? * PI() / 180
) * SIN(
v0_.lat * PI() / 180
) + COS(
? * PI() / 180
) * COS(
v0_.lat * PI() / 180
) * COS(
(? - v0_.lng) * PI() / 180
)
) * 180 / PI()
) * 60 * 1.1515 * 1.609344
) <= ?
Parameters: [44.8769806, 44.8769806, -0.5519386, 20]
但是找到了任何结果!当我用硬核写20个工作!我不知道发生了什么......
答案 0 :(得分:0)
好的,所以这个奇怪的行为来自缓存/ cookie。以前我从数据库中进行了迁移,他们将字段rayon varchar更改为int。所以更清楚缓存,一切正常。
很抱歉打扰你这么愚蠢的回答。
感谢所有人!