Laravel Eloquent: with(), has(), whereHas()

更新於 發佈於 閱讀時間約 4 分鐘

本篇主要是要探討,with/has/whereHas/doesntHave/whereDoesntHave之間的差別,以部落格文章及留言一對多的例子來看。


資料情境:

raw-image
raw-image

文章1有2則留言,文章2有1則留言,文章3則沒有留言。


程式碼與結果:

raw-image
raw-image
raw-image

$with_result = Article::with('comments')->get();
raw-image

with有帶出的意思,這邊意思等於撈出所有文章也帶出對應的留言。


$has_result = Article::has('comments')->get();
raw-image

has是把所有有留言的文章找出來,不帶出留言。


$has_with_result = Article::has('comments')->with('comments')->get();
raw-image

has+with是把所有有留言的文章找出來,帶出留言。


 $whereHas_result = Article::whereHas('comments', function($q){
$q->where('create_datetime', '>=', '2022-04-02 00:00:00');
})->get();
raw-image

whereHas找出所有有留言&任一留言有create_datetime >= 2022-04-02 00:00:00的文章。


$doesntHave_result = Article::doesntHave('comments')->get();
raw-image

doesntHave找出所有沒有留言的文章。


$whereDoesntHave_result_1 = Article::whereDoesntHave('comments', function($q){
$q->where('create_datetime', '>=', '2022-04-02 00:00:00');
})->get();
raw-image

找出所有沒有留言or 所有留言create_datetime皆非>=2022-04-02 00:00:00的文章。


$whereDoesntHave_with_result_1 = Article::whereDoesntHave('comments', function($q){
$q->where('create_datetime', '>=', '2022-04-02 00:00:00');
})->with('comments')->get();
raw-image

whereDoesntHave+with 同上,只是把留言也找出來。


$whereDoesntHave_result_2 = Article::whereDoesntHave('comments', function($q){
$q->where('create_datetime', '<=', '2022-04-02 00:00:00');
})->get();
raw-image

whereDoesntHave找出所有沒有留言or 所有留言create_datetime皆非<=2022-04-02 00:00:00的文章。



本筆記參考:
1. https://blog.csdn.net/qq_32439101/article/details/81449190
2. https://stackoverflow.com/questions/30231862/laravel-eloquent-has-with-wherehas-what-do-they-mean
3. https://laravel.com/docs/9.x/eloquent-relationships

留言
avatar-img
留言分享你的想法!
avatar-img
Vic Lin的沙龍
20會員
161內容數
Vic Lin的沙龍的其他內容
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Thumbnail
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
Thumbnail
Example code: $data['items']: $items: 本筆記參考: 1. https://docfunc.com/posts/36/foreacharraymap-%E8%88%87-laravel-collection-post
Thumbnail
Example code: $data['items']: $items: 本筆記參考: 1. https://docfunc.com/posts/36/foreacharraymap-%E8%88%87-laravel-collection-post
Thumbnail
假設資料如下: local DB裡面的test Collection SELECT SELECT可以這樣寫: 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。 回傳結果如下: 軟刪除
Thumbnail
假設資料如下: local DB裡面的test Collection SELECT SELECT可以這樣寫: 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。 回傳結果如下: 軟刪除
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
本篇主要是要探討,with/has/whereHas/doesntHave/whereDoesntHave之間的差別,以部落格文章及留言的例子來看。 資料情境: 程式碼與結果: with是把所有文章跟留言都找出來。 has是把所有有留言的文章找出來,不包含留言。
Thumbnail
本篇主要是要探討,with/has/whereHas/doesntHave/whereDoesntHave之間的差別,以部落格文章及留言的例子來看。 資料情境: 程式碼與結果: with是把所有文章跟留言都找出來。 has是把所有有留言的文章找出來,不包含留言。
Thumbnail
之前在執行某些專案的時候,常看到->with()這種寫法,因此一直都很好奇到底跟->join()寫法有什麼差別,哪一種寫法效能比較好呢? 資料情境: 假設現在情境是要撈出文章跟留言,目前共有2篇文章,每篇各有4萬筆留言,也就是留言table共有8萬筆資料: 程式碼: 實驗結果: 結論:
Thumbnail
之前在執行某些專案的時候,常看到->with()這種寫法,因此一直都很好奇到底跟->join()寫法有什麼差別,哪一種寫法效能比較好呢? 資料情境: 假設現在情境是要撈出文章跟留言,目前共有2篇文章,每篇各有4萬筆留言,也就是留言table共有8萬筆資料: 程式碼: 實驗結果: 結論:
Thumbnail
如下圖範例,在最後->get()之後加上->keyBy('id'),可以把id這個欄位變成key,在資料處理過程很好用。 本筆記參考: 1. https://stackoverflow.com/questions/26865877/laravel-eloquent-return-array-ke
Thumbnail
如下圖範例,在最後->get()之後加上->keyBy('id'),可以把id這個欄位變成key,在資料處理過程很好用。 本筆記參考: 1. https://stackoverflow.com/questions/26865877/laravel-eloquent-return-array-ke
Thumbnail
假如開發了一個部落格,以下是ERD設計: 接著從程式碼來看如何join: $this->article ->join('comments', 'article.article_id', '=', 'comments.article_id') ->select('article.article_i
Thumbnail
假如開發了一個部落格,以下是ERD設計: 接著從程式碼來看如何join: $this->article ->join('comments', 'article.article_id', '=', 'comments.article_id') ->select('article.article_i
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News