2016-09-21 7 views
0

というクエリをwhereという節で大量に作成しようとしていましたが、Laravel 5.3 Eloquent Query Builderで構文エラーが発生しました。Laravel 5の単引用符で構文エラーが発生するEloquent Query Builder

クエリは以下の通りです:

これに翻訳され
$query = $this->model 
    ->where('state', "pending") 
    ->whereRaw('created_at <= NOW() - INTERVAL 12 HOUR') 
    ->update(['state' => "timeout"]); 

update `orders` 
set `state` = timeout, `updated_at` = 2016-09-21 21:47:39 
where `state` = pending and created_at <= NOW() - INTERVAL 12 HOUR 

このクエリでは、列stateupdated_atの値は単一引用符で書かれていないので失敗し続けています。

Laravelに単一引用符を正しく書き込むように強制するにはどうすればよいですか?

答えて

1

たぶんwhere('created_at', DB::raw('NOW() - ..'));

を試してみて、なぜあなたは、単一引用符でpedingを入れていますか? Laravelは自動的に値をエスケープします。

+0

私はDB :: rawを使うことができると知っていましたが、よりエレガントな解決策を見つけたいと思います。私は二重引用符を使用しているので、クエリビルダーがそれらを削除しているので、私は単一のものを使用しています...多分これは主な問題に関連していますか? (Btw 'state'は列挙型です) – Mumpo

+0

文字列がmysqlに送信されるため、列挙型の違いはありません。私はDB :: rawはより洗練されたソリューションだと思っています。このようなハッキングを開始する場合は、生のクエリを書くことをお勧めします。 –

+0

私はむしろクエリービルダーツールを使用したいと思います。私は一重引用符の問題を 'state'カラムに入れるように編集しました。私は彼らが関連しているかもしれないと思っています – Mumpo

0

使用

$results = MyModel::where('user_id', Auth::user()->id) 
      ->where('created_at','>=',\DB::raw('"'.$from.'"')) 
      ->where('created_at','<=',\DB::raw('"'.$to.'"')) 
      ->orderby('id','desc') 
      ->paginate(15); 

・ホープこのことができますのようなものを。

関連する問題