我有一个mysql查询,它并不是很复杂,但我似乎不知道应该如何用Symfony编写它。
首先是查询:
select
db1.table1.acronym
, db1.table1.name
, db2.table1.name
from db1.table1, db2.table1
where db1.table1.acronym like concat('%', @t1, '%')
or db1.table1.name like concat('%', @t1,'%')
or db2.table1.name like concat('%', @t1,'%');
我基本上是想看看t1是否是这些列中任何单词的一部分。假设@t1
是正在传递的变量。我不确定我是否应该在存储库中写这篇文章,如果应该,如何写。我正在寻找最佳实践方法。
谢谢
您的查询没有连接,因此我不确定您在这里想要实现什么,但是如果您只想在db1.table1
和db2.table1
中查找所有实体,那么这些应该是两个单独的查询。
同样,在Doctrine中,很难使用多个数据库,所以除非你有充分的理由,否则我建议你将两个表移动到同一个数据库,并将db2.table1
重命名为db1.table2
...
在此之后,Table1Repository
中的QueryBuilder将在table1
中查找实体,如下所示:
public function findByNameOrAcronymLike($nameOrAcronym) {
$qb = $this->createQueryBuilder('table1')
->where('table1.acronym LIKE :t1')
->or('table1.name LIKE :nameOrAcronym')
->setParameter('nameOrAcronym', addcslashes($nameOrAcronym, '_%'))
->getQuery()
->execute();
}
以及表2repository
中的QueryBuilder:
public function findByNameLike($name) {
$qb = $this->createQueryBuilder('table2')
->where('table2.name LIKE :name')
->setParameter('name', addcslashes($name, '_%')
->getQuery()
->execute();
}
addcslashes
调用被添加到转义%
和-这些字符在
中被视为特殊字符,如
说明符
首先,您需要为第一个数据库和第二个数据库配置两个Doctrine DB连接。看起来是这样的(我假设您还没有为表创建实体):
//in config.yml
doctrine:
dbal:
default_connection: db1
connections:
db1:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
db2:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name2%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
请注意,这里我们在dbname中为db2连接使用参数database_name2,其他参数很可能是相同的,除非您在另一台服务器上有其他数据库,因此您应该相应地在parameters.yml.中创建参数
然后,您可以通过控制器操作等方式连接到单独的数据库,如下所示:
//SomeController.php
$connection1 = $this->getDoctrine()->getConnection('db1');
$connection2 = $this->getDoctrine()->getConnection('db2');
$results1 = $connection1->fetchAll('SELECT acronym, name FROM table1 ...');
$results2 = $connection2->fetchAll('SELECT name FROM table2 ...')
请注意,这不是最佳做法。最佳实践是为表创建实体,然后沿着我在上面创建的连接创建单独的实体管理器。
如何正确设置与实体管理器的多个连接
问题内容: 我有4个不同的表: table_price_product(包含与产品及其价格有关的信息) table_price_list(包含与价目表相关的信息) prices_per_client(包含与给定特定产品的不同客户的价格相关的信息) 客户(包含与客户相关的信息) 这是我的SQL FIDDLE:LINK 我懂了: 现在,我想在一个查询中获得与产品和客户有关的所有数据,分别用CLASS
我正在努力为visual composer进行两个自定义查询: > 一个查询,它将以升序或降序(以最先显示即将到来的事件的为准)显示发布日期在今天之后的帖子(有发布未来帖子的插件) 仅显示满足多个类别要求的帖子的查询(例如,“即将发布”和“类别”或“即将发布”和“社交”类别) 真的,这两种方法中的任何一种都可以得到我想要的结果,但是第一种方法是最方便的。 在我的一生中,我无法在自定义查询中破译Co
我有这个: 如何从hashlist中排除“item”?打破了我的头。Linq不想对我开放。
如何使用在中创建复杂查询请求?我担心实体之间的关系。它们可能会影响请求的准备。 需要查询SQL,我的版本@Query:
问题内容: 我正在尝试查询Google BigQuery公共Reddit数据集。我的目标是使用Jaccards’Index来计算子reddit的相似性,该索引的定义如下: 我的计划是在2016年8月按评论数选择前N = 1000个子项,然后计算其笛卡尔积,以得到形状中所有子项的组合。 然后使用这些组合的行来查询subreddit1和subreddit 2之间的用户并集以及交集。 我到目前为止的查询
问题内容: 表Words_Learned包含用户已知的所有单词以及 单词学习的顺序。它具有3列:1)单词ID和2)用户ID,以及3) 单词学习的顺序。 表中Article包含文章。它具有3列:1)文章ID,2) 唯一字数和3)文章内容。 该表Words包含每篇文章中包含的所有唯一单词的列表。 它有2列1)单词ID和2)文章ID 数据库图如下/ 在此处输入图片说明 您可以从此处下载数据库代码:htt