2016-03-17 8 views
5

Ich erhalte diese seltsamen Fehler:Spalt nicht gefunden: 1054 Unknown column '0' in 'field list' - Laravel - ich habe nicht eine 0-Spalte überall in meinem Code

SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: update forum_threads set 0 = locked, 1 = 1, updated_at = 2016-03-17 16:01:59 where topic_id = 3 and forum_threads . deleted_at is null)

Die Sache ist, ich habe keine 0 Spalte. Ich habe keine Where-Klausel mit einer 0 irgendwo in meinem Code. Ich verwende eine Bereichsabfrage.

Mein Controller ist:

$action = $request->input('action'); 
    $topic = $request->input('topic'); 
    $thread = Thread::where('topic_id', $topic); 

    switch ($action) { 
     case ('locked'): 
      $thread->lock(); 
      break; 
    } 

Wie Sie sehen können, habe ich nicht viel tun. Ich versuche nur einen Thread zu sperren. Ich rufe den Lock-Bereich in meinem Thread Modell. Ich habe viele Schalterfälle, von denen einer lock ist. Ich habe die Hälfte der Abfrage oben ausgeführt, damit ich mich nicht wiederholen muss. Ich habe es einfach in der $thread Variable gespeichert, so dass ich Aktionen wie $thread->delete() und $thread->restore() ausführen kann.

Mein Abfragebereich in Thread-Modell:

public function scopeLock($query) 
{ 
    return $query->where('locked', 0)->update(['locked', 1]); 
} 

Das ist es. Ich denke, es kann sein, weil ich eine Where-Klausel von meinem Controller (Thread::where('topic_id', $topic)) übergeben habe und ich setze es gerade auf meinem Bereich fort.

Jede Hilfe wird sehr geschätzt.

+1

'$ thread = Thread :: wo ('topic_id', $ topic) -> first();' Diese Abfrage vervollständigen und versuchen? –

+1

Außerdem, '-> update (['gesperrt' => 1]);' –

+0

Immer noch der gleiche Fehler. Und ich habe viele Threads, nicht nur eine, die ich bearbeiten werde, das würde nicht funktionieren. –

Antwort

16

Der Fehler ist aufgrund ->update(['locked', 1]); der ->update(['locked' => 1]);

die Update-Funktion als „Spalte“ => „Wert“ ein Array verwendet werden soll, Ihre Syntaxfehler verursachen Laravel [ 0 => 'locked', 1 => 1] zu denken, so dass es zu dieser SQL übersetzt SET 0 = 'locked', 1 = 1 ...

+0

Haha, ich habe es herausgefunden, bevor ich zurückkam, um eine Antwort zu schreiben. Du warst der Erste, der antwortete, also akzeptiere ich deine Antwort. Vielen Dank! –

+0

@ TaylorSwift Ich antwortete dies im Kommentarbereich. :/ –

+0

@JilsonThomas Ich habe gerade bemerkt, dass dein zweiter Kommentar auf den Fehler hingedeutet wurde, den ich gemacht habe. Ich hatte keine Ahnung, dass ich bei meiner Update-Methode einen Fehler gemacht habe. Ich habe Ihre Antwort aufheben lassen –

1

Wie ich im Kommentarbereich erwähnt, Ihre Funktion dies ändern:

public function scopeLock($query) 
{ 
    return $query->where('locked', 0)->update(['locked' => 1]); 
} 

Beachten Sie die Änderungen in der Update-Methode.

Verwandte Themen