2017-10-19 7 views
0

Je reçois la colonne de ligne à base de semences au hasard, en utilisant éloquent:Laravel Vous avez demandé 1 articles, mais il n'y a que 0 articles disponibles

$physician = SelectOption::where('select_option_group_id', 1)->pluck('name')->random(); 

il fonctionne s'il existe des données dans le tableau de select_options. Mais si ce n'est pas le cas, cela donne une erreur:

Vous avez demandé 1 articles, mais il n'y a que 0 produits disponibles.

Je veux le laisser vide, s'il est vide.

+0

C'est parce que vous essayez littéralement à un résultat qui n'existe pas au hasard. Tout ce que vous devez faire est de vérifier avec une instruction if, soit count ($ médecin)> 0 ou vide ($ médecin) ou n'importe quelle méthode que vous souhaitez. – abr

Répondre

2

Vérifiez si la collecte n'est pas vide avant de faire random():

$collection = SelectOption::where('select_option_group_id', 1)->pluck('name'); 
if (!$collection->isEmpty()) { 
    $physician = $collection->random(); 
} else { 
    ... 
} 
+0

qu'est-ce que 1 dans la méthode aléatoire? – Nevermore

+0

Nombre d'articles à retourner. Mais l'utilisation de 1 est réellement inutile, alors je l'ai enlevé maintenant. Voir les sources 'random()' [ici] (https://github.com/illuminate/support/blob/master/Collection.php#L1174) pour plus de détails. –

+0

merci @ Marcin, j'ai compris – Nevermore

1

Utilisation inRandomOrder() à la place:

$physician = SelectOption::where('select_option_group_id', 1)->inRandomOrder()->first(); 
$name = is_null($physician) ? 'No data available' : $physician->name;