簡體   English   中英

如何在 laravel vue 中的兩個日期之間進行搜索

[英]How to search between two dates in laravel vue

我有一個搜索一些數據的表格

我可以搜索普通字段

但我無法獲取日期范圍

控制器:

public function index() {

$query = Matter::query();

$query->when(request('search_client','search_file_ref','search_file_status','search_date_from','search_date_to'), function($query){
$query->where('client_company', 'like', '%' . request('search_client') . '%');
$query->where('file_ref', 'like', '%' . request('search_file_ref') . '%');
$query->where('status', 'like', '%' . request('search_file_status') . '%');

$query->whereBetween('created_at', ['search_date_from', 'search_date_to']);
});
return $query->orderBy('id','asc')->get();

}

看法:

                <b-col md="4">
                    <form @submit.prevent="searchDateFrom">
                        <label for="">Choose File Status:</label>
                <div class="input-group">

                    <input
                        v-model="search_date_from"
                        type="date"
                        placeholder="Search File Status"
                        class="form-control"
                    />
                    <input
                        v-model="search_date_to"
                        type="date"
                        placeholder="Search File Status"
                        class="form-control"
                    />
                    <div class="input-group-append">
                        <button type="submit" class="btn btn-primary">
                            <i class="fas fa-search"></i>
                        </button>
                    </div>
                </div>
            </form>
            </b-col>

...

data(){
    return {
        search_client: "",
        search_file_ref: "",
        search_file_status: "",
        search_date_from: "",
        search_date_to: "",
        matters:[]
    }
},

...

searchDateFrom(){
        axios.get('/api/auth/matter?search_date_from=' + this.search_date_from + 'search_date_to=' + this.search_date_to)
        .then(response => this.matters = response.data)

    },

所以當我嘗試在控制器中執行此操作時:

$query->whereBetween('created_at', ['2022-06-01', '2022-06-07']);

我正在獲取數據和正確的范圍

但是當我像這樣向它添加請求時:

$query->whereBetween('created_at', ['search_date_from', 'search_date_to']);

我停止從 API 獲取數據並且沒有顯示

模型:

{
use HasFactory;
protected $fillable = [
    'matter_type','client_company','description','file_group',
    'control_account','pic','lawyer','task_assign','task_recipient',
    'file_ref','remark','purchaser_1','purchaser_2','status'
];
protected $casts = [
'created_at' => 'datetime:m / d / Y',
];
}

我的請求有什么問題嗎?

我能夠獲取數據並搜索其他字段(日期除外)

並嘗試實現搜索字段,以便用戶能夠設置兩個日期並獲得此范圍之間的結果

您的查詢是正確的,但是您犯了一個小錯誤,因為您忘記將日期參數包裝在request幫助程序中。 您沒有從請求中傳遞日期,而是將字符串字面量search_date_fromsearch_date_to傳遞給whereBetween語句。

你的代碼

$query->whereBetween('created_at', ['search_date_from', 'search_date_to']);

更正的代碼

$query->whereBetween('created_at', [request('search_date_from'), request('search_date_to')]);

請參閱下面更正的代碼。

public function index() {

        $query = Matter::query();

        $query->when(request('search_client','search_file_ref','search_file_status','search_date_from','search_date_to'), function($query){
            $query->where('client_company', 'like', '%' . request('search_client') . '%');
            $query->where('file_ref', 'like', '%' . request('search_file_ref') . '%');
            $query->where('status', 'like', '%' . request('search_file_status') . '%');

            $query->whereBetween('created_at', [request('search_date_from'), request('search_date_to')]);
        });
        return $query->orderBy('id','asc')->get();

    }

首先,您已在此處將變量寫為字符串。 $query->whereBetween('created_at', ['search_date_from', 'search_date_to']);

你可以這樣寫$query->whereBetween('created_at', [$search_date_from, $search_date_to]);

我更喜歡這樣寫: $query->whereBetween(DB::raw("DATE('created_at')"), array($from, $to));

暫無
暫無

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

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