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());

获取带有占位符的查询和将用来代替占位符的值。