$record = ......;
if($record instanceof \Illuminate\Support\Collection){
// its a collection
}
elseif($record instanceof \App\User){
// its a single url instance
}
Однако, выше не будет работать напрямую, если вы используете построители БД:
$record = DB::table('users')->get();
$record
- это массив.Так что вам нужно его увлажнить, чтобы вы могли использовать вышеупомянутую логику:
if(is_array($record){
$record = \App\User::hydrate($record);
}
Теперь вы можете использовать if else логику для $ record, поскольку она преобразована из массива в \Illuminate\Database\Eloquent\Collection
, который внутренне расширяется от \Illuminate\Support\Collection
Кроме того, второй случай, если кто-то сделал first()
вместо get()
:
$record = \DB::table('users')->first();
Тогда $record
является stdClass
объектом.так что вы можете избежать гидратации и рассматривать его как однопользовательские данные.
Я обеспокоен системной логикой и моделями, в которых вам необходимо иметь такой тип условных выражений.Если возможно, я бы порекомендовал провести рефакторинг таким образом, чтобы вы всегда знали, является ли это коллекцией или экземпляром.Вы можете использовать подсказки типов в функциях, чтобы быть более понятными.