Je reçois cette erreur étrange:
SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue '0' dans 'liste de champs' (SQL: mise à jour
forum_threads
Set0
= Verrouillé,1
= 1,updated_at
= 2016-03-17 16:01:59 oùtopic_id
= 3 etforum_threads
.deleted_at
Est nul)
Le fait est que je n'ai pas de colonne 0. Je n'ai pas de clause where avec un 0
N'importe où dans mon code. J'utilise une requête de portée.
Mon contrôleur est:
$action = $request->input('action');
$topic = $request->input('topic');
$thread = Thread::where('topic_id', $topic);
switch ($action) {
case ('locked'):
$thread->lock();
break;
}
Comme vous pouvez le voir, je ne fais pas grand-chose. J'essaie juste de verrouiller un fil. J'appelle la portée de verrouillage dans mon modèle Thread
. J'ai beaucoup de boîtiers de commutation, dont l'un est lock
. J'ai exécuté la moitié de la requête en haut, donc je n'ai pas à me répéter. Je l'ai simplement stocké dans la variable $thread
Afin de pouvoir effectuer des actions comme $thread->delete()
et $thread->restore()
.
Ma portée de requête dans le modèle de thread:
public function scopeLock($query)
{
return $query->where('locked', 0)->update(['locked', 1]);
}
C'est tout. Je pense que c'est possible parce que j'ai une clause where passant de mon contrôleur (Thread::where('topic_id', $topic)
) et je continue juste sur ma portée.
Toute aide est grandement appréciée.
L'erreur est due à ->update(['locked', 1]);
qui devrait être ->update(['locked' => 1]);
la fonction de mise à jour utilise un tableau comme "colonne" => "valeur", votre erreur de syntaxe provoque Laravel à penser [ 0 => 'locked', 1 => 1]
, donc cela se traduit par ce SQL SET 0 = 'locked', 1 = 1
...
Comme je l'ai mentionné dans la section des commentaires, changez votre fonction en ceci:
public function scopeLock($query)
{
return $query->where('locked', 0)->update(['locked' => 1]);
}
Notez les changements dans la méthode de mise à jour.