Задать параметры в построителе запросов Laravel построитель запросов - PullRequest
0 голосов
/ 24 января 2020

Я хочу спросить, как мне ввести параметры в мой запрос?

Это код, который я сделал в Laravel.

public function trans () {
    $query = DB::table('transaction')
                ->join('users', 'users.id', '=', 'transaction.user_id')
                ->select('transaction.user_id', 'users.name', 'users.email', 'users.gender', 'users.birthday')
                ->selectRaw('EXTRACT (YEAR FROM AGE (birthday)) as age, COUNT(transaction.id) as trans_total, AVG(transaction.amount) as average')
                ->where('transaction.type', '=', 'cr')
                ->whereIn('transaction.description', function ($subQuery) {
                    $subQuery->selectRaw('description')->from('transaction')->where('description', 'SIMILAR TO', '%(Buy)%');
                })->whereBetween('transaction.created_at', [$start->format('Y-m-d'), $end->format('Y-m-d')])
                ->groupBy([
                    'users.id', 
                    'name', 
                    'gender', 
                    'transaction.user_id',
                ]);

    if ($this->request-> == 'min') {
        $query->whereIn('transaction.amount', function ($subQuery) use($av) {
            $subQuery->selectRaw('AVG(transaction.amount) as average FROM transaction where average <= :av', [
                'av' => $av
            ]); 
        });
    }

    $paginate = $query->paginate();

    return $paginate;
}

в sql query.

select "transaction"."user_id",
"users"."name",
"users"."email",
"users"."gender",
"users"."birthday", EXTRACT (YEAR FROM AGE (birthday)) as age, COUNT(transaction.id) as trans_total, AVG(transaction.amount) as average from "transaction" 
 inner join "users" on "users"."id" = "transaction"."user_id" where "transaction"."type" = ? and "transaction"."description" 
 in (select description from "transaction" where "description" SIMILAR TO ?) and "transaction"."created_at" between ? and ? and "transaction"."amount" 
 in (select AVG(transaction.amount) as average FROM transaction where average <= :av) group by "users"."id",
"name",
"gender",
"transaction"."user_id"

Но я получил это сообщение

Неверный номер параметра: смешанные именованные и позиционные параметры

План, который я хочу отфильтровать средняя сумма меньше, чем указано в параметрах $ av.

Спасибо.

...