2017-04-10 1 views
1

, so habe ich diese Eingabe von invoice_table "order_numbers", mit Werten etwas wie folgt aus: 91,92,93Laravel, für ein anderes Modell durch Komma getrennte Werte als ID geeting

in Controller:

$ Rechnung -> order_numbers = Eingabe :: get ('order_numbers');

Was ich brauche, ist, dass die Bestellnummern (91,92,93) in Orders_Table zu finden und aktualisiert es Wert ist

Das ist, was ich in Controller versuchen:

$invoice->order_numbers = Input::get('order_numbers'); 
$orderIds = explode(',', $invoice->order_numbers); 
    $cnt = count($orderIds); 

    for ($i = 0; $i < $cnt; $i++) { 
     $order = Order::findOrFail($orderIds); 
     $order->is_billed = '1'; 

     $order->save(); 

    } 

, aber ich habe diesen Fehler : BadMethodCallException in Macroable.php Zeile 74: Methode speichern ist nicht vorhanden.

Kann mir jemand helfen, was zu tun ist? Dank

+0

Ist Ihre Model-Klasse 'extend Model'? –

+0

Ändern Sie einfach Ihre Datenbankstruktur als richtig normalisierte Datenbank –

+0

Rifki Sie können Array nicht als Parameter in findOrFail Funktion verwenden! –

Antwort

3

Sie können den gesamten Code ändern:

$orderIds = explode(',', request('order_numbers')); 
Order::whereIn('id', $ordersIds)->update(['is_billed' => 1]); 

Ihr Code wird N * 2 Abfragen (200 Anfragen für 100 IDs) und dieser Code nur eine Abfrage für eine beliebige Anzahl von IDs generieren generieren.

update() Methode verwendet mass assignment, so stellen Sie sicher is_billed ist in $fillable Array.

+1

vielen Dank Alexey Mezenin. Das ist so einfach und funktioniert. Vielen Dank –

Verwandte Themen