Débutant avec sql, Je travaille sur laravel et je souhaite changer les valeurs d'une table à laquelle l'utilisateur qui est connecté est lié
J'ai 3 tables:
Clé étrangère de l'utilisateur (id) dans les examens (user_id)
et
Clé étrangère Exams (id) dans Verification (exam_id)
Comment modifier les vérifications de uniquement l'utilisateur connecté? il le fait tout seul alors Je pense que nous aurons besoin

 Auth::user()
    DB::table('verifications')->where([
    ['confirmation', 'non'],
    ['modifier', 'oui'],
    ])->update(['confirmation' => "oui"]);
0
Mehdi El Aissi 23 mai 2018 à 16:52

3 réponses

Meilleure réponse

Si vous n'utilisez pas de relations laravel, utilisez Joins.

DB::table('verifications')
    ->leftJoin('exams', 'verification.exam_id', '=', 'exams.id')
    ->leftJoin('users', 'exams.user_id', '=', 'user.id')
    ->where([
        ['verifications.confirmation', 'non'],
        ['verifications.modifier', 'oui'],
        ['users.id', Auth::user()->id]
    ])
    ->update(['verificationsconfirmation' => "oui"]);
0
Malkhazi Dartsmelidze 23 mai 2018 à 14:32

Vous devez interroger l'existence de la relation. Mais vous devez d'abord avoir des relations entre les modèles.

Exemple:

Si vous avez besoin d'encore plus de puissance, vous pouvez utiliser les méthodes whereHas et orWhereHas pour mettre des conditions «where» sur vos requêtes has. Ces méthodes vous permettent d'ajouter des contraintes personnalisées à une contrainte de relation, telles que la vérification du contenu d'un commentaire:

// Retrieve all posts with at least one comment containing words like foo%
$posts = App\Post::whereHas('comments', function ($query) {
    $query->where('content', 'like', 'foo%');
})->get();

En savoir plus: https://laravel.com/docs/5.6/eloquent- relations # querying-relation-existence

1
marc_s 25 mai 2018 à 15:57

Vous semblez avoir l'ID des examens, alors ajoutez-le dans la requête de mise à jour: essayez comme ci-dessous:

DB::table('verifications')->with($exams)->->whereIn('exam_id', $exams->pluck('id') )->where([ ['confirmation', 'non'], ['modifier', 'oui'], ])->update(['confirmation' => "oui"]);

Mettre à jour la réponse: vous avez déjà la variable "$ exams" et vous n'avez donc pas besoin de rejoindre une table plus loin: Essayez ceci:

DB::table('verifications')->whereIn('verification.exam_id', $exams->pluck('id') )->where([ ['confirmation', 'non'], ['modifier', 'oui'], ])->update(['confirmation' => "oui"]);
0
Manojkumar B 25 mai 2018 à 08:20