簡體   English   中英

laravel 5.1雄辯的查詢

[英]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'])startstop列值之間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM