2016-04-12 17 views
0

Ben Laravel'i öğreniyorum, 5.22 üzerinde çalışıyorum. İki kaydı iki tabloya kaydetmeye çalışıyorum, ancak her iki cephede de başarı varsa sadece değişiklikleri gerçekleştireceğim, aksi takdirde başarısız ve geri çekilmesini istiyorum. Şimdi kazanınLaravel 5.2 birden fazla db işlemi yürütür, sonra da başarısız olur ya da geri dönüş yaparsa

Benim Kontrolörü kodudur:

public function store(Request $request) 
{ 
    $all = $request->all(); 

    // we need to fill in who is the creator of this new user, 
    $all['creator_user_id'] = Auth::user()->id; 

    // Commit both updates or fail and rollback 
    DB::transaction(function ($all) { 
     $client = Client::create($all); 
     $orgClient['organisation_id'] = $client->organisation_id; 
     $orgClient['client_id'] = $client->client_id; 
     OrganisationClient::create($orgClient); 
    }); 

    return redirect() 
     ->route('client.index') 
     ->withMessage([ 
      'type' => 'success', 
      'value' => 'Client <strong>' . $all->client_name . '</strong> successfully created.']); 

} 

Bu hata ile başarısız:

Type error: Argument 1 passed to Illuminate\Database\Eloquent\Model::create() must be of the type array, object given, called in /home/vagrant/Code/simply-invoice/app/Http/Controllers/ClientController.php on line 80 

Benim sorunum kapatılması $all geçiyor gibi görünüyor. $all'u kapatma parametresinden kaldırırsam, undefined variable all'u alırım. Bunu nasıl yaparım? Teşekkürler!

cevap

2

use yerine $all geri arama parametresi olarak ayarlıyorsunuz. transaction geri araması, şu anda bir parametre olarak Illuminate\Database\Connection örneğini alıyor. Eğer bu şekilde geri arama değiştirmek zorunda istediğiniz gerçek değişkeni almak için

:

// .... 
DB::transaction(function() use($all) { 
// ... 
+0

Teşekkür @Roj Vroemen, başka bugün için öğrenme! – TheRealPapa

İlgili konular