久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當(dāng)前位置:首頁(yè)>知識(shí)> laravel怎么自定義日志(3分鐘短文Laravel)

laravel怎么自定義日志(3分鐘短文Laravel)

發(fā)布時(shí)間:2024-01-23閱讀( 22)

導(dǎo)讀引言今天說(shuō)一個(gè)細(xì)分的需求,在模型中,或者使用laravel提供的EloquentORM功能,構(gòu)造查詢語(yǔ)句時(shí),返回位于兩個(gè)指定的日期之間的條目。應(yīng)該怎么寫(xiě)?本....引言

今天說(shuō)一個(gè)細(xì)分的需求,在模型中,或者使用laravel提供的 Eloquent ORM 功能,構(gòu)造查詢語(yǔ)句時(shí),返回位于兩個(gè)指定的日期之間的條目。應(yīng)該怎么寫(xiě)?

laravel怎么自定義日志(3分鐘短文Laravel)(1)

本文通過(guò)幾個(gè)例子,為大家梳理一下。

學(xué)習(xí)時(shí)間

假設(shè)有一個(gè)模型 Reservation,我們查詢某個(gè)日期的預(yù)訂條目數(shù),首先構(gòu)造日期字符串,使用內(nèi)置函數(shù):

$now = date(Y-m-d);

返回當(dāng)前日期。然后調(diào)用模型的 where 查詢語(yǔ)句:

$reservations = Reservation::where(reservation_from, $now)->get();

上一條生成的SQL語(yǔ)句如下:

SELECT * from table_name where reservation_from = $now

只會(huì)返回日期比較相等的條目。如何實(shí)現(xiàn)在 from 和 to 之間的日期呢,類似下面這樣:

SELECT * FROM table_name WHERE reservation_from BETWEEN $from AND $to

在laravel中你可以使用 whereBETWEEN 這個(gè)查詢子句。首先構(gòu)造起始和結(jié)束日期:

$from = date(2020-01-01);$to = date(2020-08-09);

然后調(diào)用查詢子句:

Reservation::whereBetween(reservation_from, [$from, $to])->get();

這樣就返回SQL查詢的 BETWEEN ... AND .... 語(yǔ)句了。

當(dāng)然了,上面的方法是在SQL中直接進(jìn)行篩選,如果查詢結(jié)果限制的條目本身比較少,也能充分利用索引,所以不擔(dān)心查詢的速度,那么我們可以在查詢完成后,在返回的 Eloquent Collection 集合上,鏈?zhǔn)秸{(diào)用過(guò)濾 filter 方法進(jìn)行篩選。

那么代碼實(shí)現(xiàn)起來(lái)像下面這樣:

laravel怎么自定義日志(3分鐘短文Laravel)(2)

注意程序?qū)懫饋?lái)很柔順,使用 Carbon 提供的 between 方法進(jìn)行判斷。程序上下文很好理解。

如果考慮初始查詢條件圈定的記錄條目過(guò)多,會(huì)對(duì)MySQL造成流量的壓力,那么在SQL階段直接篩選出最精準(zhǔn)的記錄,無(wú)疑是個(gè)好習(xí)慣。whereBetween 在模型里鏈?zhǔn)秸{(diào)用毫無(wú)壓力:

laravel怎么自定義日志(3分鐘短文Laravel)(3)

如果你覺(jué)得框架自帶的where子句不足以滿足你的查詢需求,那么直接用原生查詢條件好了,用 whereRaw 就可以了,像下面的例子,先構(gòu)造查詢區(qū)間:

$fromDate = "2020-02-01";$toDate = "2016-06-30";

然后使用參數(shù)綁定:

$reservations = Reservation::whereRaw("(reservation_from >= ? AND reservation_from <= ?)", [$fromDate." 00:00:00", $toDate." 23:59:59"])->get();

別的辦法

假如上面的寫(xiě)法你覺(jué)得不夠直觀,或者很難把握,那就跟著直覺(jué)走。判斷日期之間,無(wú)非就是大于某個(gè)日期,且小于某個(gè)日期這樣。那直接用大小比較就行了。

其實(shí)between這個(gè)關(guān)鍵字,在MySQL中也不過(guò)是大小比較的縮寫(xiě)語(yǔ)法糖。那么就可以把程序?qū)懗上旅孢@樣:

$reservations = Reservation::where(reservation_from, >=, $from) ->where(reservation_from, <=, $to) ->get();

寫(xiě)在最后

本文通過(guò)3種寫(xiě)法實(shí)現(xiàn)了對(duì)于日期之間的SQL查詢,我們建議使用SQL語(yǔ)句的限制,將篩選的結(jié)果精準(zhǔn)返回,然后做進(jìn)一步操作。laravel雖然提供了集合操作,但是在數(shù)據(jù)庫(kù)側(cè)效率并不高,所以不提倡全量查詢,集合篩選這樣的操作。

Happy coding :-)

我是 @程序員小助手 ,持續(xù)分享編程知識(shí),歡迎關(guān)注。

,
TAGS標(biāo)簽:   laravel   怎么   自定義   日志   3分鐘   laravel怎么自

歡迎分享轉(zhuǎn)載→ http://www.avcorse.com/read-109381.html

Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號(hào)-5 TXT地圖HTML地圖XML地圖