Laravel eloquent 可能的错误?
Laravel eloquent possible bug?
我想连接两个 table 并过滤连接的 table 中的一个字段。我不认为这个问题中实际的 tables 很重要,但它是一个 table 日期与 table 和事件信息相结合,因此 1 个事件可能有更多日期.
我做了这个 eloquent 行:
Event_date::whereRaw('startdate >= curdate() OR enddate >= curdate()')->whereHas('Event', function($q){$q->where("approved",true );})->orderBy('startdate', 'asc')->orderBy('enddate', 'asc')->toSql());
虽然过滤器不起作用。这就是为什么我将 ->toSql() 添加到行中的原因。
我得到以下回复:
select * from `event_dates` where startdate >= curdate() OR enddate >= curdate() and exists (select * from `events` where `event_dates`.`event_id` = `events`.`id` and `approved` = ?) order by `startdate` asc, `enddate` asc
你看到 'where("approved",true )' 的结果是 'where ..... and and approved
= ?)' 问号是从哪里来的???我尝试了不同的东西,比如 '1'、1、'True'、True、True、'true'...一切都以问号形式返回。
有什么建议吗??
谢谢!
欧文
这是预期的行为。 Laravel 使用准备好的语句。要获取放入占位符的参数,您可以使用
$query->getBindings();
例如,在您的情况下,您可以使用:
$query = Event_date::whereRaw('startdate >= curdate() OR enddate >= curdate()')->whereHas('Event', function($q){$q->where("approved",true );})->orderBy('startdate', 'asc')->orderBy('enddate', 'asc'));
现在
echo $query->toSql();
var_dump($query->getBindings());
获取带有占位符的查询和将用来代替占位符的值。
我想连接两个 table 并过滤连接的 table 中的一个字段。我不认为这个问题中实际的 tables 很重要,但它是一个 table 日期与 table 和事件信息相结合,因此 1 个事件可能有更多日期. 我做了这个 eloquent 行:
Event_date::whereRaw('startdate >= curdate() OR enddate >= curdate()')->whereHas('Event', function($q){$q->where("approved",true );})->orderBy('startdate', 'asc')->orderBy('enddate', 'asc')->toSql());
虽然过滤器不起作用。这就是为什么我将 ->toSql() 添加到行中的原因。 我得到以下回复:
select * from `event_dates` where startdate >= curdate() OR enddate >= curdate() and exists (select * from `events` where `event_dates`.`event_id` = `events`.`id` and `approved` = ?) order by `startdate` asc, `enddate` asc
你看到 'where("approved",true )' 的结果是 'where ..... and and approved
= ?)' 问号是从哪里来的???我尝试了不同的东西,比如 '1'、1、'True'、True、True、'true'...一切都以问号形式返回。
有什么建议吗??
谢谢!
欧文
这是预期的行为。 Laravel 使用准备好的语句。要获取放入占位符的参数,您可以使用
$query->getBindings();
例如,在您的情况下,您可以使用:
$query = Event_date::whereRaw('startdate >= curdate() OR enddate >= curdate()')->whereHas('Event', function($q){$q->where("approved",true );})->orderBy('startdate', 'asc')->orderBy('enddate', 'asc'));
现在
echo $query->toSql();
var_dump($query->getBindings());
获取带有占位符的查询和将用来代替占位符的值。