web-dev-qa-db-fra.com

laravel updateOrCreate, méthode

J'ai le code suivant dans ma méthode que j'envoie via ajax à la méthode du contrôleur:

    $newUser = \App\UserInfo::updateOrCreate([
        'user_id'   => Auth::user()->id,
        'about'     => $request->get('about'),
        'sec_email' => $request->get('sec_email'),
        'gender'    => $request->get("gender"),
        'country'   => $request->get('country'),
        'dob'       => $request->get('dob'),
        'address'   => $request->get('address'),
        'mobile'    => $request->get('cell_no')
    ]);

La dd($request->all()) me donne:

array:8 [
  "_token" => "fHeEPfTvgMD3FpIBmmc6DmKXFaiuWKZEiOhg6twQ"
  "about" => "Some about me."
  "sec_email" => "[email protected]"
  "country" => "Priority highest"
  "gender" => "male"
  "dob" => "12/12/1990"
  "address" => "Some address"
  "cell_no" => "234234234"
]

ce qui est parfait.

Jquery code:

$('#submit-editProfile-form').on('click', function() {
    var profileEditForm = $("#edit-user-profile");
    var formData = $('#edit-user-profile').serialize();
    profileEditForm.on('submit', function(e){
        e.preventDefault();
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        $.ajax({
            url:'/freelance/edit-userProfile-info',
            type:'POST',
            data:formData,
            error: function (data) {
               console.log('Error');
            }
        });
    }).submit();
});

Maintenant, le problème est que j'ai un enregistrement dans ma table, mais le code ci-dessus en crée un autre, et le second est qu'il crée multiplier par deux enregistrements sur chaque clic de bouton (demande).  

15
Gammer

Dans votre cas d'utilisation, vous devez spécifier un deuxième paramètre. Le premier indique les conditions pour une correspondance et le second est utilisé pour spécifier les champs à mettre à jour.

$newUser = \App\UserInfo::updateOrCreate([
    //Add unique field combo to match here
    //For example, perhaps you only want one entry per user:
    'user_id'   => Auth::user()->id,
],[
    'about'     => $request->get('about'),
    'sec_email' => $request->get('sec_email'),
    'gender'    => $request->get("gender"),
    'country'   => $request->get('country'),
    'dob'       => $request->get('dob'),
    'address'   => $request->get('address'),
    'mobile'    => $request->get('cell_no')
]);

Voici un exemple tiré de la documentation: https://laravel.com/docs/5.4/eloquent

// If there's a flight from Oakland to San Diego, set the price to $99.
// If no matching model exists, create one.
$flight = App\Flight::updateOrCreate(
    ['departure' => 'Oakland', 'destination' => 'San Diego'],
    ['price' => 99]
);
32
Rhu

Mon code est

CityProductTemp::updateOrCreate(
    [
        'city_id' => $city_id,
        'product_id' => $product->product_id
    ],
    [
        'mrp' => $mrp,
        'sale_price' => $sale_price,
        'in_offer' => $in_offer,
        'is_featured' => $is_featured,
        'sort_number' => $sort_number
    ]
);

Colonne inconnue id dans la clause where

SQL: UPDATE city_product_temp SET mrp = 66, is_featured = 1, 
     updated_at = 2017-09-15 15:23:17, in_offer = 0 WHERE `id` IS null
2
Gourav Arora