- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将以下查询转换为 Doctrine:
SELECT restaurants.restaurant_name ,
restaurants.restaurant_id,
j.LASTPRICE
FROM restaurants
LEFT JOIN
(
SELECT f.food_id AS fid,
f.restaurants_restaurant_id AS rid,
Max(f.food_last_price) AS LASTPRICE
FROM foods AS f
LEFT JOIN restaurants AS r
ON r.restaurant_id = f.restaurants_restaurant_id
WHERE f.food_last_price IS NOT NULL
GROUP BY r.restaurant_id) j
ON restaurants.restaurant_id = j.rid
这是我的代码:
$qb = $this->_em->createQueryBuilder();
$qb2 = $this->_em->createQueryBuilder();
$getMaxPercentage = $qb2
->select(
'MAX (Food.foodLastPrice) AS LASTPRICE ',
'Food.foodId AS fId',
'Food.restaurantsRestaurantId AS rID'
)
->from($this->entityClass,'Restaurant')
->innerJoin('Restaurant.foods','Food')
->where('Food.foodLastPrice IS NOT NULL')
->groupBy('Restaurant.restaurantId')
->getDQL();
$restaurantList = $qb
->select('Restaurants.restaurantName, Restaurants.restaurantId , j.LASTPRICE')
->from($this->entityClass,'Restaurants')
->leftJoin($getMaxPercentage,'j','WITH','Restaurants.restaurantId = j.rID')
->getQuery()->execute();
dd($restaurantList);
我报错了:
SELECT Restaurants.restaurantName,': Error: Class 'SELECT' is not defined.
我已经知道我可以在主查询中设置子查询,虽然在这种情况下我不想在 Where
表达式中使用子查询。对在学说的 LeftJoin 中使用 select 有什么建议吗?
已编辑:我尝试在我的查询中使用 DQL:
$query = $this->_em->createQuery(
'
SELECT Restaurants.restaurantName , Restaurants.restaurantId
FROM App\\Restaurant AS Restaurants
LEFT JOIN (
SELECT f.foodId AS fid,
f.restaurantsRestaurantId AS rid,
Max(f.foodLastPrice) AS LASTPRICE
FROM App\\Food AS f
LEFT JOIN App\\Restaurant AS r
WITH r.restaurantId = f.restaurantsRestaurantId
GROUP BY r.restaurantId) AS J
ON Restaurants.restaurantId = j.rid
');
但是我又报错了:
[Semantical Error] Error: Class '(' is not defined.
是否可以在 Doctrine 中使用 select in left join?
EDITED 2 : 我读了 similar question我决定用另一种方式写:
$qb = $this->_em->createQueryBuilder();
$qb2 = $this->_em->createQueryBuilder();
$subSelect = $qb2
->select(
array(
'Food.foodLastPrice AS LASTPRICE ',
'Food.foodId AS fId',
'Food.restaurantsRestaurantId AS rId')
)
->from($this->entityClass,'Restaurant')
->innerJoin('Restaurant.foods','Food')
->where('Food.foodLastPrice IS NOT NULL')
->groupBy('Restaurant.restaurantId')
->getQuery()->getSQL();
$restaurantList =
$qb->select(
'Restaurant1'
)
->from($this->entityClass, 'Restaurant1')
->leftJoin('Restaurant1',sprintf('(%s)',$subSelect),'internalQuery','Restaurant1.restaurantId = internalQuery.rId')
->getQuery()->getSQL();
dd($restaurantList);
再次出现错误:
near 'Restaurant1 (SELECT': Error: Class 'Restaurant1' is not defined.
最佳答案
你想做的事是不可能的:
https://github.com/doctrine/doctrine2/issues/3542 (2013 年 11 月,但 doctrine 概念没有改变,因为 doctrinebot 于 2015 年 12 月 7 日关闭了它)
DQL is about querying objects. Supporting subselects in the FROM clause means that the DQL parser is not able to build the result set mapping anymore (as the fields returned by the subquery may not match the object anymore). This is why it cannot be supported (supporting it only for the case you run the query without the hydration is a no-go IMO as it would mean that the query parsing needs to be dependant of the execution mode).
In your case, the best solution is probably to run a SQL query instead (as you are getting a scalar, you don't need the ORM hydration anyway)
您可以找到解决方法,例如原始 sql,或重新考虑您的查询。
关于php - 如何在 LeftJoin querybuilder 中进行选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42386341/
代码在 EventUserTypes 模型中 $this->find() ->select(['event_usertypes.user_type_id' , 'usertypes.n
我的 eloquent 模型有一些问题,我尝试将两个不同的表合并为一个 现在我有两个表。 第一个表名称“company_saved_cv” |id|company_id|worker_id | ---
我正在尝试将 leftJoin 添加到 hasOne 方法中,但它似乎不起作用。来自主表的数据存在,但不来自连接表。代码: public function getUser() {
我是 laravel 的新手。 我有两张 table 。1)产品2) 价格 ----------------------------- - products - --
此代码返回“count”和“odds”值完全相同(它们不应该相同)。它实际上只计算“o.id”并为两者返回相同的值。 如何正确计算“b.id”? \DB::table('matches as
我有这个 SQL 代码,我想把它转换成 ormlite - 但我不知道如何以最好的方式做到这一点。 SELECT * FROM Job INNER JOIN Emp ON Job.JobAnsvar
我在使用 leftJoin 进行 laravel select 时遇到问题。我试图选择 2 个帖子并计算有多少条评论(第一个帖子有 7 个评论,第二个 - 0),但我只得到第一个帖子有 7 个评论。
我是 Laravel 的新手,正在学习 leftJoin。 我有一个名为“users”的表,其中行为“steam_id”。 我有另一个名为“匹配”的表。 “匹配”表有一个名为的唯一行“match_
我正在尝试使用此 Controller 删除“ super 管理员”: $user->superadmin = DB::table('role_users AS ru') ->leftJoin('us
这个问题在这里已经有了答案: Join between tables in two different databases? (4 个答案) 关闭 6 年前。 我有一个项目,其中有两个 MySQL
我在 MySQL 中有两个表。 logs 表包含列:time、user_id、event_type users 表有列:email, id 每次用户登录到生成日志文件的系统时,event_type 列
我的数据库中有以下表格: 连接 编号 owner_id 所有者 编号 名 ConnectionsController.php $connections = DB::table('connections
我有一个问题 Select m.name from machines m innerJoin config c ON m.cod = c.cod --> where ( c.categ
在我的 laravel 5.7/eloquent/Mysql 5.5 应用程序中,我需要在聊天列表中获取任何聊天消息的值以及给定 useronly ($user_id) 的任何聊天消息的另外 1 列消
我在类客户和类产品之间有很多关系。例如 数据库客户 | ID | Name | ----------------------- | 01 | Jack | | 02 | Joe | |
如何将以下查询转换为 Doctrine: SELECT restaurants.restaurant_name , restaurants.restaurant_id,
表 1) m_conservationsetting +------------+-------+------------+ | FacilityId | Unit | CategoryId | +
我有一个产品,其描述、名称等以多种语言保存在另一个表中。一种产品可以有多种翻译(产品数据)。 目前,我获得了产品的所有翻译,并执行了 foreach 和 ifs 来根据语言环境获得所需的翻译...如果
我有 3 个模型: 用户 喜欢 发帖 Like 在 user_id 和 post_id(这是其他 2 个模型的 id 列)上使用 CakePHP 约定设置了 2 个外键。 我想运行一个查找,在 Pos
旧的 leftJoin 问题的一个细微变化:我有两个要加入的表: ID Val1 1 100 2 200 3 300 和 ID Val2 2 50 已关注 combine two tables
我是一名优秀的程序员,十分优秀!