簡體   English   中英

Laravel Eloquent 返回具有空屬性的雙數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM