我有简单的模型Archive,这对MySQL表来说很紧张。表具有日期类型的字段日期,以及其他一些字段,如id,title,description等。
如果通过除日期之外的任何其他字段进行查询,我将获得所有期望的结果。到目前为止,模型只返回空结果。
$criteria = array(['prog_i','=',9], ['date','>=','2017-11-01'], ['date','<=','2017-11-11']);
$offset = 0;
$query = Archive::where($criteria)
->orderBy('date', 'desc')
->skip($offset)
->take(40);
$results = $query->get();
var_dump($results);
/* object(Illuminate\Database\Eloquent\Collection)#350 (1) { ["items":protected]=> array(0) { } }
*/
但是,如果我在phpMyAdmin中使用由Laravel(来自调试器)构建的相同查询进行测试,它可以正常工作并返回结果。
select * from `archive` where (`prog_id` = '9' and `date` >= '2017-11-01' and `date` <= '2017-11-11') order by `date` desc limit 40 offset 0
Showing rows 0 - -1 (4 total, Query took 0.3204 seconds.)
可能出现什么问题?
答案 0 :(得分:0)
您可以尝试 whereDate
$criteria = array(['prog_id','=',9]);
$criteria_1 = array(['date','>=','2017-11-01'], ['date','<=','2017-11-11']);
$offset = 0;
$query = Archive::where($criteria)
->whereDate($criteria_1)
->orderBy('date', 'desc')
->skip($offset)
->take(40)
->toSql();<--- add toSql for check your query
print_r($query);
答案 1 :(得分:0)
你应该使用
$query = Archive::where('prog_id','=',9)
->whereBetween('date',['2017-11-01','2017-11-11'])
->orderBy('date', 'desc')
->skip($offset)
->take(40);
答案 2 :(得分:0)
你不能为多个where传递数组,但是你可以在内部通过循环传递条件。
$query = Archive::query();
foreach($criteria as $item) {
$query->where($item[0], $item[1], $item[2]);
}
$query->orderBy('date', 'desc')
->skip($offset)
->take(40);
$results = $query->get();