2016-04-14 9 views
3

Ich habe ein einfaches Modell IsolatedQuery, das aus einem name und query Feld besteht. Ich habe diese zwei Felder in der $fillable Eigenschaft des Modells definiert. Der IsolatedQueryController @ Speicher wie folgt aussieht:

public function store(IsolatedQueryRequest $request) 
{ 
    IsolatedQuery::insert($request->all()); 

    session()->flash('flash_message', 'Isolated Query succesvol opgeslagen'); 

    return redirect('iq'); 
} 

Der Vollständigkeit halber hier ist die Quelle des Modell (es ist so wenig wie ich es beschrieben)

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class IsolatedQuery extends Model 
{ 
    protected $fillable = [ 
     'name', 
     'query' 
    ]; 
} 

Die IsolatedQueryRequest erfordert nur beide name und query zu sein gefüllt mit irgendeinem Wert.

Beim Aufruf der store-Methode mit einem bestimmten Namen und Abfragewert erhalte ich den Fehler: SQLSTATE[42S22]: Column not found: 1054 Unknown column '_token' in 'field list'.

Es ist offensichtlich, dass ein _token Feld mit der Anfrage gesendet wird, aber ich bin ein wenig verwirrt, warum es versucht, es mit der tatsächlichen SQL-Abfrage zu speichern, da es nicht in der $fillable-Array aufgeführt ist.

Warum wird Masse zugewiesen?

+0

Mögliche Duplikat [Laravel 5.2 $ ausfüllbare] (http://stackoverflow.com/questions/34864666/laravel-5-2-fillable) – bishop

+0

@bishop Es ist kein Duplikat ist, stellt diese Frage, warum es passiert ist und das eine Sie verlinken darauf nicht. Außerdem geht es bei dieser Frage um die Verwendung der befüllbaren Eigenschaft, und bei der anderen geht es darum, sie nicht zu verwenden. –

+0

Es ist in der Tat kein Duplikat. Ich möchte '$ request-> all()' anwenden, sollte es möglich sein, anstatt "$ request-> only" aufzurufen. Wenn ich das wollte, müsste ich die massenzuweisbare Liste nicht mit $ fillable definieren. – Ben

Antwort

3

Sie verwenden die Methode des Abfrage-Generators insert. Es überprüft nicht die fillable.
Sie sollten die create oder update Methode von Eloquent verwenden.
Bitte lesen Sie die documentation.

Sie können auch Eingabedaten an construct oder fill Methode von Eloquent übergeben. Danach können Sie die save Methode verwenden.

+0

Howly mowly .. Ich habe es komplett durchgesehen ... Danke! + 1A – Ben

+0

Man kann auch ['Eloquent :: fill()'] verwenden (https://github.com/laravel/framework/tree/master/src/Illuminate/Database/Eloquent/Model.php#L428-L454) , obwohl IMO 'create' und' update' die Absicht deutlicher ausdrücken. – bishop

+0

also was wirst du tun, wenn du große Daten hast, um es einmal einzufügen? Das Durchschleifen und Verwenden der create-Methode ist überhaupt nicht effizient – wahdan