洗掉一些資料時發現問題,所以我隔離了代碼
Route::get('v1/testapi', function (Request $request) {
return [
DB::table('attendances')->select("id","attendance_date_id","remarks")
->whereIn('attendance_date_id', [925,926])->get(),
Attendance::select("id","attendance_date_id","remarks")
->whereIn('attendance_date_id', [925,926])->get()
];
});
這個 API 總是回傳
{
"withDB":[
{"id":8344,"attendance_date_id":925,"remarks":"Good"},
{"id":8345,"attendance_date_id":925,"remarks":"Good"},
{"id":8346,"attendance_date_id":925,"remarks":"Good"},
{"id":8352,"attendance_date_id":926,"remarks":"Good"},
{"id":8353,"attendance_date_id":926,"remarks":"Good"}
],
"withModel":[]
}
資料庫查詢和模型查詢有什么區別嗎?
注意:有或沒有select("id","attendance_date_id","remarks")它的行為相同。
uj5u.com熱心網友回復:
這稱為SoftDelete。你的桌子上有deleted_at列Attendances。Laravel 模型有一個稱為 trait 的特性SoftDeletes,如果該特性存在于模型中,它不僅會洗掉記錄,而且Eloquent會在列上設定日期deleted_at并且不會顯示此記錄。
另一方面,資料庫沒有這種型別的東西。它就像一個普通的查詢生成器,如果它存在于資料庫中,它只會顯示給你。在這里您可以閱讀有關軟洗掉的更多資訊。
uj5u.com熱心網友回復:
一些額外的細節:任何人都可以通過啟用資料庫查詢日志來解決這些型別的問題,如下所示
Route::get('v1/testapi', function (Request $request) {
DB::enableQueryLog();
return [
'withDB'=>DB::table('attendances')->select("id","attendance_date_id","remarks")->whereIn('attendance_date_id', [925,926])->get(),
'withModel'=>Attendance::select("id","attendance_date_id","remarks")->whereIn('attendance_date_id', [925,926])->get(),
DB::getQueryLog()
];
});
我發現查詢差異
{"query":"select `id`, `attendance_date_id`, `remarks` from `attendances` where `attendance_date_id` in (?, ?)","bindings":[925,926],"time":1.65},
{"query":"select `id`, `attendance_date_id`, `remarks` from `attendances` where `attendance_date_id` in (?, ?) and `attendances`.`deleted_at` is null","bindings":[925,926],"time":0.39}
'deleted_at' 列造成問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/437550.html
