数据库:
id | name | // ...
====================
1 | London |
2 | Paris |
3 | Moscow |
4 | New York |
// ...
TEXT:
This is a big city. I live in this town.
I like the name of city. 'New York' is very cool.
However, I have to go to Moscow this summer.
// ...
数据库中有很多记录 文本用各种语言编写。
我想获取与文字相关的记录 在这种情况下,我想获得“纽约”和“莫斯科”的记录。
我使用的是Doctrine2 ORM和DQL 我的数据库通常是mysql。
是否可以通过使用DQL来实现这一目标?
城市实体:id,name,population date_created等...
id | name | population | // ...
====================================
1 | London | 1,2448,3938|
2 | Paris | 1,8759,4844|
3 | Moscow |12,8450,3748|
4 | New York | 8,4795,8558|
// ...
文章实体:id,body,author,date_created等......
id | body | // ...
============================================================
1 | This is a big city. I live in this town. |
| I like the name of city. |
| 'New York' is very cool. |
| However, I have to go to Moscow this summer.|
| // ... |
2 | We bought a house in London. //... |
3 | I go to Canada this weekend. //... |
4 | Weather in Africa today is too bad. //... |
// ...
无论是从文件还是从数据库获取文本都是好的。
public function findOneById($id)
{
$query = $this->getEntityManager()->createQuery('
SELECT a, u
FROM MyArticleBundle:Article a
LEFT JOIN a.author u
WHERE a.id = :id
')
->setParameter('id', $id);
return $this->try_catch($query);
}
or
$article = file_get_contents('example.txt');
我将它带到显示屏上。
{{ article }} or {{ article.body }} etc...
目前,我如何获得与本文相关的城市数据? 是否需要复杂的数据库配置?
文本和实体(在本例中为“城市”数据)没有关联 我是否有可能获得文本或字符串中出现的数据?
例如:SELECT c FROM MyExampleBundle:City c WHERE c.name appear in ({$text});
虽然我知道这个例子是不可能的,但我想知道是否有一种方法可以轻松地在DQL中使用。
答案 0 :(得分:0)
在这种情况下,我想获得“纽约”和“莫斯科”的记录。
因此,您需要将like()
function与%
字符一起使用。 %
将充当通配符,例如A%
将选择所选字段以A
开头的每一行。 %A%
会选择包含A
的每一行。
public function findArticlesFromTowns($town_1, $town_2)
{
$qb = $this->createQueryBuilder('u');
$buffer = $qb
->select('a, u')
->leftJoin('a.author', 'u')
->where(
$qb->expr()->andX(
$qb->expr()->like('a.body',
$qb->expr()->literal('%'.$town_1.'%')),
$qb->expr()->like('a.body',
$qb->expr()->literal('%'.$town_2.'%'))
)
)
;
$q = $buffer->getQuery();
return $q->getResult();
}
$town_1
和$town_2
分别是纽约和莫斯科。通过使用andX()
,查询将选择body
字段包含纽约 和 莫斯科的所有行。< / p>