2016-03-17 16 views
5

sto ottenendo questo strano errore:Colonna non trovato: 1.054 Unknown colonna '0' nella 'lista campo' - laravel - non ho una colonna 0 ovunque nel mio codice

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)

La cosa è, non ho una colonna 0. Non ho una clausola where con 0 in nessun punto del mio codice. Sto usando una query di ambito.

mio controller è:

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

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

Come potete vedere, non faccio molto. Sto solo cercando di bloccare un thread. Sto chiamando l'ambito del blocco nel mio modello Thread. Ho un sacco di casi di switch, uno dei quali è lock. Ho eseguito metà della query nella parte superiore, quindi non devo ripetermi. L'ho semplicemente memorizzato nella variabile $thread in modo da poter eseguire azioni come $thread->delete() e $thread->restore().

La mia domanda portata nel modello Discussione:

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

Questo è tutto. Penso che potrebbe essere perché ho una clausola where che passa dal mio controller (Thread::where('topic_id', $topic)) e lo sto solo continuando nel mio ambito.

Qualsiasi aiuto è molto apprezzato.

+1

'$ thread = Thread :: where ('topic_id', $ topic) -> first();' Completa questa query e prova? –

+1

Inoltre, '-> update (['locked' => 1]);' –

+0

Continua a ricevere lo stesso errore. E ho molti thread, non solo uno che modificherò in modo che non funzioni. –

risposta

16

L'errore è dovuto ->update(['locked', 1]); che dovrebbe essere ->update(['locked' => 1]);

la funzione di aggiornamento utilizza una matrice come "colonna" => "valore", l'errore di sintassi provoca laravel pensare [ 0 => 'locked', 1 => 1], quindi si traduce in questo SQL SET 0 = 'locked', 1 = 1 ...

+0

Haha, l'ho capito appena prima di tornare a postare una risposta. Sei stato il primo a rispondere così accetterò la tua risposta. Grazie! –

+0

@TaylorSwift Ho risposto a questo nella sezione commenti. :/ –

+0

@JilsonThomas Ho appena notato che il tuo secondo commento era puntato sull'errore che avevo commesso. Non avevo idea di aver commesso un errore nel mio metodo di aggiornamento. Ho upvoted la tua risposta ... –

1

Come ho già detto nella sezione dei commenti, modificare la funzione a questo:

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

Nota i cambiamenti nel metodo di aggiornamento.

Problemi correlati