[英]Laravel Eloquent returns Array only on first record in database (`where` method)
我有這樣的代碼:
$subOffers = SubOffer::get()->where('offers_id', 1);
當我返回 $subOffers 時,我得到了一個這樣的數組。
[{"id":1,"offers_id":"1","price":"123.0","start_date":"2022-07-23","stop_date":"2022-07-24","additional_info":"r832ufr803yw98fhew98f8h93wq"}]
但是當我將 1 更改為 2 或 3 或 4 或...時,我得到了這樣的對象。
{"3":{"id":4,"offers_id":"4","price":"12,341","start_date":"2022-07-10","stop_date":"2022-07-13","additional_info":null}}
在這種情況下,我將其更改為 4,我得到了 n-1 個密鑰。
這里發生了什么? 為什么我收到一個對象而不是數組? 當 offer_id 大於 1 時會發生這種情況。 Offers_id 是外鍵。
好的,我找到了解決方案
$subOffers = SubOffer::where('offers_id', $id)->get();
只是我不得不用get交換where
但我還是不知道,這是怎么回事? 我想知道,為什么會這樣。
eloquent 上的 get() 方法返回一個 laravel 集合,之后放置的任何內容,例如 where(),都會影響生成的集合,請參見https://laravel.com/docs/9.x/collections ,集合是一個類似於一個數組,但有大量類似於數據庫查詢的函數,但都在本地內存中。
如果你在 get() 之前有 where() 方法,那么你正在構建一個數據庫查詢,它直到 get() 才會執行。 您會得到不同的結果,因為查詢構建和收集方法的工作方式相似,但它們做的事情不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.