スタニスラフ・クラフチュク:
私はいくつか含まれてデータベースクエリにする必要がありWHERE
条件を。
問題は、私は正しく渡すことができないということです$メッセージの要求に配列を。
public function Controller(Request $request)
{
$firstDate = $request->input('start');
$secondDate = $request->input('end');
$messages = $request->input('messages');
$data = $this->client->executeQuery( "SELECT sum('count') as 'var', 'firstname', 'surname' FROM 'table' WHERE 'surname' IN (?) AND 'time' BETWEEN ? AND ? group by 'surname' ORDER BY 'var' desc limit 10",
[$messages, $startDate, $endDate]);
$data = $data ->getData();
return response()->json($data);
}
しかし、その結果として、私は間違いを得ます:
メッセージ:「パラメータ1のバインド値型の配列がサポートされていません」
私が使用しtarantool
たデータベースを。何か案は?
ユージンLeonovich:
まず第一に、あなたの構文が間違っている、それがあるべき
executeQuery('...', $messages, $startDate, $endDate);
の代わりに
executeQuery('...', [$messages, $startDate, $endDate]);
(冗長注意してください[]
、あなたのバージョンでは)。
私が正しくあなたの質問を理解していれば第二に、あなたはあなた展開する必要がある$messages
配列をしてまで、別の引数として各値を渡しますexecuteQuery()
。また、あなたは動的に内部の多くのプレースホルダとしてのあなたのSQLステートメントを構築する必要があるIN()
として、$message
配列サイズ。このようなもの:
$placeholders = rtrim(str_repeat('?,', count($messages)), ',');
$params = $messages;
$params[] = $startDate;
$params[] = $endDate;
$sql = "... IN ($placeholders) AND 'time' BETWEEN ? AND ? ...";
$result = $this->client->executeQuery($sql, ...$params);