ThinkPHP中CURD where的使用注意事項

鴨脖發表於2015-02-04

這幾天寫的thinkphp程式中,使用where進行連貫操作的時候總是編譯不出來自己想要的sql,於是仔細地鑽研了一下,發現原來thinkphp是這麼編譯where的:

thinkphp中,where中的引數,可以是string,也可以是array,並且可以進行連貫操作,例如

$model->where("id=8")->where("name='yelbosh'")->where(array('grade'=>'高一'))->where(array('class'=>'二班'));

我們肯定期望的是編譯出來的sql如下:

where id=8 and name='yelbosh' and grade='高一' and class='二班'

但是通過$model->getLastSql() echo出來的卻是  name='yelbosh' and grade='高一' and class='二班'


原理其實很簡單,thinkphp只會加一個string類的where至編譯部分,並且分析順序和sql一樣,從右到左,把第一個string類的where作為編譯的where

而那些array型別的where,則會被合併至一個大的array並全部執行。


想一想其實也是很合理的,string類的where主要用來進行連表操作,而array則一般是根據欄位的值進行檢索

相關文章