2017-03-13 37 views
0

我想連接兩個表並過濾連接表中的一個字段。我不認爲這個問題中的實際表格很重要,但它是一個表格,其中的日期與表格中的事件信息一起加入,所以1個事件可能有更多的日期。 我做了這個雄辯行:Laravel雄辯可能的錯誤?

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 

你看「阿凡(簡稱‘認可’,真)」的結果「其中.....和和approved =)?」哪裏的問號來自???我嘗試了不同的東西,比如'1',1,'真',真,'真''......一切都回來了,成爲一個問號。

有什麼建議?

謝謝!

Erwin

+0

PDO的工作原理就是這樣!它發送'?'佔位符和一組相應的值。這是爲了防止sql注入 –

回答

3

這是預期的行爲。 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()); 

得到既查詢佔位符和值將代替佔位符。