私は、アレイ内のデータベースWHREから選択することができますどのように

スタニスラフ・クラフチュク:

私はいくつか含まれてデータベースクエリにする必要があり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);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=342838&siteId=1