[英]laravel 5.1 eloquent query
我有一個在PMA中工作正常的查詢,並且我試圖將其轉換為Eloquent,但我一定缺少一些東西。 這里是SQL查詢:
SELECT t1.* FROM ppr__child_absence t1
LEFT JOIN ppr__children t3 ON t3.idcode=t1.child_idcode
WHERE t1.id = (SELECT t2.id FROM ppr__child_absence t2
WHERE t2.child_idcode = t1.child_idcode
ORDER BY t2.id DESC LIMIT 1)
AND t3.deleted_at IS NULL
AND $input BETWEEN start AND stop;
嘿是我雄辯的查詢:
$input = Request::all();
$pprs =
DB::table('ppr__child_absence')
->join('ppr__children', function($join) {
$join->on('ppr__children.idcode', '=', 'ppr_children_absence.child_idcode')
->where('ppr__child_absence.child_idcode', '=', DB::raw('SELECT t2.id FROM ppr__child_absence t2
WHERE t2.child_idcode = ppr__child_absence.child_idcode
ORDER BY t2.id DESC LIMIT 1'));})
->whereNull('ppr__children.deleted_at')
->whereBetween($input, array('ppr_children_absence.start','ppr_children_absence.stop'))->get();
我不斷收到錯誤消息:Grammar.php第58行中的ErrorException:strtolower()期望參數1為字符串,給定數組。
這里有人可以引導我朝正確的方向前進嗎? 基本上,用戶使用日期選擇器輸入1個日期,然后根據選定的日期提交按鈕以獲取結果。
工作查詢在這里沒有錯誤,但沒有結果
$input = Request::all();
$pprs = DB::table('ppr__child_absence')
->select('ppr__child_absence.*')
->join('ppr__children', function($join) {
$join->on('ppr__children.idcode', '=', 'ppr__child_absence.child_idcode')
->where('ppr__child_absence.id', '=', DB::raw('SELECT t2.id FROM ppr__child_absence t2
WHERE t2.child_idcode = ppr__child_absence.child_idcode
ORDER BY t2.id DESC LIMIT 1'));})
->whereNull('ppr__children.deleted_at')
->where('ppr__child_absence.start', '<', $input['ppr_day'])
->where('ppr__child_absence.stop', '>', $input['ppr_day'])->get();
$input = Request::all();
將所有輸入字段存儲在一個數組中。
您正在使用->whereBetween($input,...)
並且whereBetween()
的第一個參數應該是字符串(表列的名稱),但是您正在傳遞數組。
您沒有提供有關輸入的詳細信息。 假設輸入包含一個名為“ field”的字段,則應使用->whereBetween($input['field'],...)
您似乎想要的不是whereBetween
方法提供的內容。 使用whereBetween
,邏輯是希望給定的列值介於兩個輸入值之間。 Laravel查詢生成器文檔中的示例選擇得當:
// the column 'votes' value should be between 1 and 100
$users = DB::table('users')->whereBetween('votes', [1, 100]);
您似乎想要確保輸入值在兩個不同的列值之間。 您可以通過具有兩個單獨的條件來做到這一點:
->where('ppr_children_absence.start', '<', $input['value'])
->where('ppr_children_absence.stop', '>', $input['value'])
這將確保$input['value'])
在start
和stop
列值之間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.