我有一個搜索一些資料的表格
我可以搜索普通欄位
但我無法獲取日期范圍
控制器:
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',
];
}
我的請求有什么問題嗎?
我能夠獲取資料并搜索其他欄位(日期除外)
并嘗試實作搜索欄位,以便用戶能夠設定兩個日期并獲得此范圍之間的結果
uj5u.com熱心網友回復:
您的查詢是正確的,但是您犯了一個小錯誤,因為您忘記將日期引數包裝在request幫助程式中。您不是從請求中傳遞日期,而是將字串文字傳遞search_date_from給search_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();
}
uj5u.com熱心網友回復:
首先,您已在此處將變數寫為字串。$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));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/491288.html
標籤:javascript mysql 拉拉维尔 Vue.js 日期
下一篇:在Angular/Javascript/Typescript中將當前日期時間格式化為“yyyy-MM-dd'T'HH:mm:ss.SSSZ”
