2017-10-19 4 views
0

Ceci est de la dernière question que je posais ..Comment mettre à jour plusieurs rangs avec différents ID dans Laravel

J'ai une table d'adhésion

Schema::create('role_memberships', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('role_id'); 
     $table->string('MembershipName'); 
     $table->text('MembershipValue'); 
     $table->timestamps(); 
    }); 

J'ai deux lignes de données avec la même role_id et je souhaitez mettre à jour deux lignes Ceci est mon contrôleur

$updateArray = [['MembershipValue' => $request->PostAdMaxImage], 
['MembershipValue' => $request->PostAdExpiredDay]]; 
DB::table('role_memberships')->where('role_id', $id)- 
>whereIn('role_id', $role->pluck('id'))->update($updateArray); 

quand j'ai essayé de mettre à jour, je suis un tableau d'erreur de conversion de chaîne ..

+0

pouvez-vous poster votre erreur? et $ role-> pluck ('id') retourne un tableau parce que whereIn wnat un tableau comme 2 paramètres. ex (-> où ('id', [1, 2, 3])) – LorenzoBerti

+0

@LorenzoBerti Je mets à jour l'utilisation ajax .. donc, l'erreur ne s'affiche dans inspectez élément –

+0

'foreach ($ updateArray comme $ array) { DB :: table ('role_memberships') -> où ('rOLE_ID', $ id) -> où ('rOLE_ID', $ de rôle> plumer ('id')) -> mise à jour ($ array); } ' –

Répondre

1

Je pense que ce n'est que la façon que je peux utiliser ..

DB::table('role_memberships')->where('role_id', $id)->where('MembershipName','PostAdMaxImage')->update(['MembershipValue' => $request->PostAdMaxImage]); 
DB::table('role_memberships')->where('role_id', $id)->where('MembershipName','PostAdExpiredDay')->update(['MembershipValue' => $request->PostAdExpiredDay]); 

Si vous les gars a la meilleure façon ou le plus court chemin, s'il vous plaît laissez moi .. Merci;)

+0

Est-ce que ma solution ne fonctionnait pas? – abr

+0

Ça ne marche pas .. Il faut la dernière valeur @abr –

0

Il y a 2 erreur:

1) La fonction dans laquelle veulent un tableau pour le paramètre comme

$users = DB::table('users') 
       ->whereIn('id', [1, 2, 3]) 
       ->get(); 

2) La fonction de mise à jour veulent un simple tableau pour le paramètre comme

DB::table('users') 
      ->where('id', 1) 
      ->update(['votes' => 1]); 

Vous ar passant un [[], []]

Donc vous devez passer l'exemple $model->update(['MembershipValue' => $request->PostAdMaxImage])

ici vous avez trouvé la documentation complète pour update et whereInhttps://laravel.com/docs/5.5/queries

+0

dans le mot, je ne peux pas utiliser 'whereIn'? droite? –

+0

quand je retourne 'DB :: table (' role_memberships ') -> où (' role_id ', $ id) -> whereIn (' role_id ', $ role-> pluck (' id ')) -> get() ; ' Il retourne les données d'adhésion avec id = 1 et id = 2 –

0

Essayez celui-ci. ça marche pour moi.

DB::table('role_memberships')->where('role_id', $id)- 
>update(['MembershipValue' => $request->PostAdMaxImage, 'MembershipValue' => $request->PostAdExpiredDay]); 
+0

cela ne fonctionne pas pour moi .. J'ai essayé le chemin comme ça .. et le résultat est toujours le même, il prend le dernier enregistrement .. Mais je ne ' t comprendre, la réponse dans l'élément d'inspection afficher comme ceci '{" id ": 2," RoleName ":" zxdas "," IsAllCategory ": false," IsUserCanLogin ": false," created_at ":" 2017-10- 19 14:55:46 "," updated_at ":" 2017-10-19 14:55:46 "}, [{" role_id ":" 2 "," MembershipName ":" PostAdMaxImage "," MembershipValue ":" Bonjour "}, {" role_id ":" 2 "," MembershipName ":" PostAdExpiredDay "," MembershipValue ":" monde "}]]' –

+0

Je pense que vous avez un problème en vérifiant le rôle id, vérifiez-vous cette variable " $ id "? essayez de supprimer le "whereIn ('role_id', $ role-> pluck ('id'))" dans la requête vérifier la requête. – Kenneth

0

I have two rows data with same role_id and I want to update two rows This is my controller

$updateArray = [['MembershipValue' => $request->PostAdMaxImage], MembershipValue' => $request->PostAdExpiredDay]]; 
DB::table('role_memberships')->where('role_id', $id)->whereIn('role_id', $role->pluck('id'))->update($updateArray); 

when I tried to update, I got an error array to string conversion..

C'est parce que vous avez un tableau dans un tableau sur votre updateArray $. La fixation comme cela devrait corriger votre erreur:

$updateArray = ['MembershipValue' => $request->PostAdMaxImage, 'MembershipValue' => $request->PostAdExpiredDay]; 
0

MISE A JOUR DU LOT (VRAC) EN Laravel

https://github.com/mavinoo/updateBatch

$table = 'users'; 

$value = [ 
     [ 
      'id' => 1, 
      'status' => 'active' 
     ], 
     [ 
      'id' => 5, 
      'status' => 'deactive', 
      'nickname' => 'Ghanbari' 
    ], 
    [ 
      'id' => 10, 
      'status' => 'active', 
     'date' => Carbon::now() 
    ], 
    [ 
     'id' => 11, 
     'username' => 'mavinoo' 
    ] 
]; 

$index = 'id'; 

UpdateBatch::updateBatch($table, $value, $index);