Laravel 5

Form Request et Table Pivot

Avatar de Methos
Methos

Bonjour à tous,

Je suis en train de coder un site de vidéo et chacune de mes vidéos peuvent faire partie de plusieures catégories. Pour cela j'ai créer une table pivot avec une relation belongToMany, j'ai fais un système de checkbox et dans mon controller j'ai utiliser la fonction sync via mon model.

J'aimerais verrifier dans ma class Form Request que les id que je sync contenu dans un array categorie_video_id existe bien dans ma table categories pour assurer l'intégrité de ma bdd.

Pour le moment j'ai mis: 'categorie_video_id':'required|array'

Mais je ne sais pas comment faire pour verrifier le contenu de mon array!

Merci d'avance

Methos

Posté il y a 1 an
Avatar de MaitrePylos
MaitrePylos

Bonjour c'est ceci que vous cherchez ? : https://laravel.com/docs/5.8/validation#rule-exists

Posté il y a 1 an
Avatar de Methos
Methos

Oui et non, car ce qui va être testé c'est un array, n'est ce pas ? Est ce que cette regle regarde le contenu de l'array pour savoir si son contenu est présent ou pas dans la table ?

ex: [1,2,8,9] => est ce que les id 1-2-8-9 font parti de la table catégorie ?

Posté il y a 1 an
Avatar de MaitrePylos
MaitrePylos

Vous pouvez alors faire un custom validate, qui va boucler sur ce tableau et appliquer la règle du database exist()

Posté il y a 1 an
Avatar de Methos
Methos

Mais cela veut dire que pour chaque itération de la boucle, laravel va faire une requête pour verrifier si l'id existe dans la bdd ? C'est pas très optimisé non ?

Pourquoi ne pas faire un custom validate qui récupère toutes les catégories et ensuite je boucle sur les catégories de ma vidéo et je fais juste un in_array() ?

N'y a t'il pas façon inclu dans laravel ?

Posté il y a 1 an
Avatar de MaitrePylos
MaitrePylos

Alors dans ce cas autant faire une requêtes qui fais un in (dans le select) dans la db , moins lourd que des in_array

Posté il y a 1 an
Avatar de Methos
Methos

J'y avais pensé mais en quoi c'est une verrification ? Si dans mon select j'ai in (1,2,3,8,9) et que 9 n'est pas une catégorie, il va juste mes selectionner toutes les autres ? Est ce que je me trompe ?

Edit: ou c'est juste pour réduire la taille de l'array ?

Posté il y a 1 an
Avatar de MaitrePylos
MaitrePylos

Je n'ai pas bien la structure en tête, mais l'un ou l'autre c'est la solution :)

Posté il y a 1 an
Avatar de Methos
Methos

Vous n'avez pas quelle structure en tête ? ^^

Posté il y a 1 an
Avatar de nash
nash

categorie_video_id existe bien dans ma table categories pour assurer l'intégrité de ma bdd.

Pourquoi tu supprime les catégories

Posté il y a 1 an
Avatar de Methos
Methos

Pourquoi tu supprime les catégories

Je ne comprend pas la question :s Je ne supprime pas les catégories, je veux juste que chacun des id présents dans ma table pivot correspondent bien à une catégorie de vidéo :)

Posté il y a 1 an
Avatar de Methos
Methos

Bonjour, voila la règle de validation que j'ai mis en place:

    Validator::extend('video_categories', function($attribute, $value, $parameters, $validator) {
        $bddCategorie = DB::table('video_categories')->select('id')->whereIn('id', $value)->get();
        return $bddCategorie->pluck('id')->diffAssoc($value)->isEmpty();
    });

Vous en pensez quoi ?

Posté il y a 1 an
Avatar de Methos
Methos

Petit up :D

Posté il y a 1 an
Avatar de alexisgeneau
alexisgeneau

Je pense que tu peux optimiser comme ça :

Validator::extend('video_categories', function($attribute, $value, $parameters, $validator) {

        $categories_count = DB::table('video_categories')->whereIn('id', $value)->count();

        return categories_count === count($value);

    });
Posté il y a 1 an

Vous ne pouvez pas répondre à ce sujet.