从查询中得到一个集合后,我想对它进行排序。然后,出现了这个错误消息:
错误码:907错误信息:ORA-00907:缺少右括号位置:202语句:select count(*) as aggregate from "ATTENDANCE_LISTS"(select * from " meeting "在"ATTENDANCE_LISTS"!"MEETING_ID"="MEETINGS"!"ID"one_answers";STATUS_MEETING"=:p0 "START_MEETING"<=:p1 order by "START_MEETING"SQL: select count(*) as aggregate from "ATTENDANCE_LISTS"(select * from " meeting "在"ATTENDANCE_LISTS"!"MEETING_ID"="MEETINGS"!"ID"one_answers";STATUS_MEETING"= Disetujui "START_MEETING"<= 2012-04-19 20:11:24 order by "START_MEETING"desc)
代码如下:
$meetings2 = AttendanceLists::whereHas('meeting', function ($query) {
$now = new DateTime("now");
$query->where('status_meeting', '=', 'Disetujui')
->where('start_meeting', '<=', $now)
->orderBy('start_meeting', 'desc')
;
})->paginate(5);
我只使用上面的Laravel雄辩方法构建查询,并且我已经为此挣扎了好几天。请帮帮我。
是的,这里似乎有一个类似的帖子:ORA-00907:缺少右括号
但是,我所遇到的问题与使用SQL格式手工构建查询无关。我使用PHP Laravel eloquent方法构造了这个查询,所以它不可能真的是关于一个缺失的括号。**
编辑:简而言之,当我试图按"meeting"属性对attendancelist进行排序(按属性的属性排序)时,问题就出现了。任何帮助吗?
解决方案如下。
解决方案是改变whereHas to join。下面是代码:
$meetings = AttendanceLists::join('meetings', 'meetings.id', '=', 'attendance_lists.meeting_id')
->where('attendance_lists.user_id', '=', $id_user)
->where('meetings.status_meeting', '=', 'Disetujui')
->where('meetings.start_meeting', '<', $now)
->orderBy('meetings.start_meeting', 'desc')
->paginate(5);
我不知道PHP也不知道Laravel,但是-从Oracle的故事来看,它是ORDER BY
子句你在EXISTS
子查询中使用。这是一个演示。
这是你所拥有的:
SQL> select * from dual
2 where exists (select *
3 from dual
4 order by dummy);
order by dummy)
*
ERROR at line 4:
ORA-00907: missing right parenthesis
删除ORDER BY
子句:
SQL> select * from dual
2 where exists (select *
3 from dual
4 );
D
-
X
SQL>
看起来您应该将order by子句移出whereHas
函数:
$meetings2 = AttendanceLists::whereHas(
'meeting',
function ($query) {
$now = new DateTime("now");
$query->where('status_meeting', '=', 'Disetujui')
->where('start_meeting', '<=', $now);
})->orderBy('start_meeting', 'desc')
->paginate(5);
(注意:这是未经测试的,因为我没有访问Laravel或你的模式。)
或者,使用join
而不是whereHas
。