laravel
  • eloquent
  • 2014-05-21 232 views 1 likes 
    1

    可能有人幫助我怎麼能做到以下Laravel - 雄辯複雜的where子句

    ->where("YEAR(date_field)", '>=', 2014) 
    

    date_field這樣的事情是一個MySQL的日期,如:2014-03-22

    +0

    通過我已經解決了時間使用這個:' - > whereRaw ('YEAR(date_field)> =?',array(2014))' – user3415803

    回答

    2

    A raw() command should work

    ->whereRaw('YEAR(date_field) >= ?', array(2014)) 
    
    +0

    This throws:argument 2 passed to Illuminate \ Database \ Query \ Builder :: whereRaw()must be a array,string given – user3415803

    +0

    Sorry - fixed my answer 。另一種選擇是Antonios答案。 – Laurence

    +0

    感謝您的快速響應,我需要實現您所寫的內容。 – user3415803

    1

    越少原始的你使用更好,Laravel使用Carbon作爲它的DateTime內部類,所以你可以:

    $year = \Carbon\Carbon::createFromDate(2014)->firstOfYear(); 
    

    它會返回一個日期是這樣的:

    2014-01-01 00:00:00 
    

    因此,如果您是在今年過濾,你需要在2014年開始的所有記錄,你可以這樣做:

    ->where('date_field', '>=', $year) 
    

    不要忘記你可以創建幫助功能或方法:

    public function year($year) 
    { 
        return \Carbon\Carbon::createFromDate(2014)->firstOfYear();  
    } 
    

    And t母雞剛:

    ->where('date_field', '>=', year(2014)) 
    
    +0

    我的問題是,我只需要date_field的年份,比如''YEAR(date_field)'' – user3415803

    +0

    您是按年份過濾還是不過濾?如果你是,你當然可以使用日期。 –

    +0

    我想完全實現這個(剛剛得到了答案):' - > whereRaw('YEAR(date_field)> =?',array(2014))',我不明白這將如何使用您的解決方案或也許我們誤解了彼此。 – user3415803

    1

    原料當然是一種選擇,但由於v4.1.25你可以用下面的方法,以及:

    ->whereYear('column', '>=', 2014); 
    
    // and for month or day: 
    ->whereMonth('column', '>=', 5); 
    ->whereDay('column', '>=', 15); 
    
    +0

    不幸的是,我正在開發的項目在v4.1.24中,但很好知道:) – user3415803

    相關問題