[英]Laravel Eloquent returning double array with null properties
我正在使用 Laravel Eloquent 查詢模型。 當有可用記錄時,查詢返回一個對象數組結果。
[{id: 2, num: 3}]
當沒有可用的記錄時,Eloquent 會返回一個對象數組中的數組,其中所有對象屬性都具有空值。
[[{id: null, num: null}]]
問題是我如何測試是否沒有記錄或空對象。 以下方法均無效:
isset($records) // does not cover empty object
!empty($records) // does not seem to see null properties
count($records) > 0 // sees an array more than zero deep
這是我的查詢:
$records = FertilAppUser::select('fertilapp.*')
->leftJoin('fertilapp', 'fertilappuser.id', '=', 'fertilapp.fertilappuser_id')
->where('fertilappuser.id', '=', $request->get( 'id' ))
->groupBy('fertilapp.id')
->orderBy('fertilapp.id', 'asc')
->get();
必須處理空結果,因為這是可能的,而且對我來說,這似乎是一件很難處理的事情。 一切正常,然后我測試空結果,繁榮出現錯誤!
有人可以幫助我理解為什么結果是不同深度的數組嗎?
如果這兩個結果都在一個對象數組中,那將很容易,但是我如何檢查!empty($record[0]->id)
和!empty($record[0][0]->id)
而不會出錯.
有趣的是,以下查詢返回一個對象數組或一個 null [null]
數組。
$records = DB::select('SELECT fertilapp.* ' .
' FROM fertilapp ' .
' LEFT JOIN fertilappuser ON fertilappuser.id = fertilapp.fertilappuser_id ' .
' WHERE fertilappuser.id = ? ' .
' GROUP BY fertilapp.id ' .
' ORDER BY fertilapp.id ASC ', [$request->get( 'id' )]);
這可以用上述方法進行測試。 還是想知道為什么Eloquent方法會返回上面的結果。
運行查詢后,我檢查結果是否可用並循環遍歷它們。
if (isset($records) && !empty($records) ) {
foreach ($records as $key => $value) {...}
}
由於您自己設置$record
變量,因此isset($record)
將始終返回 true。
您應該使用!$record->isEmpty()
或$record->isNotEmpty()
而不是!empty($record)
$record->isNotEmpty()
。
您遇到的null
值可能是left join
的結果。 如果您想避免null
值,請使用(inner) join
。
您在這里使用左連接 - fertilappusers left join fertilapp 即使他們在 fertilapp 表中沒有記錄,它也會返回所有用戶記錄。
您提供的查詢是不同的。 第一個就像我上面說的。 第二個是 fertilapp left join fertilappusers,即使沒有用戶,它也會為您提供來自 fertilapp 的所有記錄。
請查看此鏈接,您將熟悉 mysql 連接的工作原理INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 之間有什么區別?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.