2
votes

requis si à Laravel

J'utilise requis si dans la validation Laravel, mais cela ne fonctionne pas. quelle est mon erreur?

public function rules()
{
    if (!empty($this->game_id)) {
                $game = Game::find($this->game_id);
                $game_type = $game->type;
            } else {
                $game_type = 'sport';
            }

   return [
                'game_id' => 'required',
                'platform_id' => 'required_if:' . $game_type . ',==,electronic',
          ]
}


3 Réponses :


3
votes

Vous n'avez pas besoin de l'expression entière, le format correct est le suivant:

 return [
                'game_id' => 'required',
                'platform_id' => 'required_if:columnName:value',
          ];


2 commentaires

Merci pour votre réponse. Le nom de la colonne provient d'une autre table. comment puis-je l'appeler dans cette colonne Nom?


Vous devrez peut-être écrire votre propre règle de validation pour cela.



1
votes

Essayez le code ci-dessous

public function rules()
{
    if (!empty($this->game_id)) {
                $game = Game::find($this->game_id);
                $game_type = $game->type;
            } else {
                $game_type = 'sport';
            }

   return [
                'game_id' => 'required',
                'platform_id' => 'required_if: . $game_type . ,==,electronic',
          ]
}

La syntaxe de required_if est 'field_name' => 'required_if: columnName: value' . Ce que vous faites est d'encapsuler le columnName dans '' guillemets simples!


4 commentaires

Merci pour votre réponse. Le nom de la colonne provient d'une autre table. comment puis-je l'appeler dans cette colonne Nom?


Que voulez-vous faire exactement?


L'utilisateur crée un tournoi. Quand il / elle sélectionnera un game_id , je vérifierai son type comme game_type à partir de la table de jeu. Le platform_id dans la table de tournoi est requis si le game_type de ce game_id est égal à electronic .


@ShokouhDareshiri avez-vous essayé mon code? J'ai ce que vous essayez de faire, mais ce code fonctionnera, essayez et faites le moi savoir.



1
votes

Je l'ai résolu dans mes propres règles comme ci-dessous:

if (!empty($this->game_id)) {

      $game = Game::find($this->game_id);
      $game_type = $game->type;

          if($game_type == 'electronic'){
                  $required = 'required';
                } else{
                    $required = ' ';
                }

          }

return [
         'game_id' => 'required',
         'platform_id' => $required,
       ]


1 commentaires

Bon à savoir :)