Laravel 5

Modifier plusieurs lignes d'une table avec une même requête

  • Avatar de BilalIghmouracene
    Membre depuis :
    08/06/2017
    Messages :
    26

    Bonjour,

    Je souhaite réaliser une requête qui va me permettre de modifier plusieurs ligne différente en même temps.
    En fait, j'ai une table setings avec des champs

    • fieldName :
    • FieldValue :

    id - fieldName - FieldValue

    1 facebook - https://www.facebook.com/.............
    2 youtube - https://www.youtube.com/channel/.....

    J'ai les liens de facebook, youtube, twitter et j'ai aussi les informations du footer et le logo.

    Mon problème c'est que j'arrive pas à automatiser (le rendre dynamique) une requête sans répéter le même code pour chaque champs afin de modifier les lien au même temps.

    Je vous remercie par avance.

  • Avatar de BilalIghmouracene
    Membre depuis :
    08/06/2017
    Messages :
    26

    J'ai trouvé cette solution :

    Formulaire :

    <form method="POST" action="{{ route('frontendParameters.updateSocialLinks') }}" >
    @csrf
    @include('back.partials.form', [
    'title' => (''),
    'type' => 'hidden',
    'name' => 'id',
    'value' => Auth::user()->id,
    'required' => true,
    ])
    @foreach($parameters as $parameter)
    @if($parameter->fieldName == 'facebook' || $parameter->fieldName == 'twitter' || $parameter->fieldName == 'youtube')

    @include('back.partials.form', [
    'title' =>
    ('Saisir le lien de '.$parameter->fieldName),
    'type' => 'text',
    'name' => $parameter->id,
    'value' => $parameter->fieldValue,
    'required' => false,
    ])
    @endif
    @endforeach
    <div class="submit-footer bg-light border-light p-5 mb-5">
    <div class="container">
    <div class="col-lg-4 mt-4">
    @component('components.button')
    @lang('Valider') @endcomponent
    </div>
    </div>

    </div>
    </form>

    Controller :

    public function updateSocialLikns(Request $request, Setting $setting){

    foreach($request->except('_token','action') as $key => $value) {

    $data = Setting::find($key);

    $data['fieldValue'] = $value;

    $data->save();

    }
    }

    Vous en pensez quoi ?

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2178

    Salut,

    On ne peut pas changer plusieurs enregistrements avec le query builder sauf si on a juste un (ou des) nom(s) de champ identique(s), ce qui n'est pas le cas.

    Pour éviter de lancer plusieurs requêtes à la base il existe un package qui fait le boulot.

  • Avatar de BilalIghmouracene
    Membre depuis :
    08/06/2017
    Messages :
    26

    Merci bestmomo,

    effectivement, le problème avec une boucle foreach c'est le lancement de plusieurs requêtes ( nombre de ligne).

    Merci encore une fois. :)

Vous ne pouvez pas répondre à ce sujet.