@morricone85

Подготовленные запросы в yii2?

Здравствуйте! Есть такой код:
$where = ''; 
       if(!empty($filter_time)) $where =" and date_created > now()-Interval <b>$filter_time </b>          minute ";
       if(!empty($filter_category))
       $where.= "and path LIKE '<b>$filter_category</b>%' "; 
      
       $sql = Yii::$app->db->createCommand("SELECT COUNT(*) FROM Pages
       JOIN categories ON categories = id_categories WHERE status = 1 $where")->queryScalar();

Как, правильно прописать bindValues().
  • Вопрос задан
  • 1688 просмотров
Решения вопроса 1
latteo
@latteo
Попробуйте вот так:
$where = ''; 
if(!empty($filter_time)) $where =" and date_created > now()-Interval :filter_time minute ";
if(!empty($filter_category))
$where.= "and path LIKE ':filter_category%' "; 

$sql = Yii::$app->db->createCommand("SELECT COUNT(*) FROM Pages
JOIN categories ON categories = id_categories WHERE status = 1 $where")
  ->bindValue(':filter_time', $filter_time)
  ->bindValue(':filter_category', $filter_category)
  ->queryScalar();
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
Зачем Вы работает с классом Command? этим Вы только создаете себе трудности... для создания сложных запрос в yii есть класс Query, который прекрасно решает Вашу задачу, например так:
$query = new \yii\db\Query();
$query->from('Pages')
    ->leftJoin('categories', ['categories' => 'id_categories'])
    ->where(['status' => 1])
    ->andFilterWhere(['like', 'path', $filter_category]);
if (! empty($filter_time)) {
    $expression = new \yii\db\Expression('now() - interval :filter_time minute', [
        ':filter_time' => $filter_time
    ]);
    $query->andWhere(['>', 'date_created', $expression]);
}
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Есть такой код
убейте того кто его написал.

SELECT COUNT(*) FROM Pages

Зачем использовать framework если не использовать AR и другие его плюшки?

Как, правильно прописать bindValues().

Пример из доков:
$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
           ->bindValue(':id', $_GET['id'])
           ->bindValue(':status', 1)
           ->queryOne();

ссылка на доки на русском: https://nix-tips.ru/yii2-api-guides/guide-ru-db-da...
ссылка на доки на английском: www.yiiframework.com/doc-2.0/guide-db-dao.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы