Группировка условий в запросе ORM Propel (condition, combine)

Часто приходится комбинировать условия в запросе. Если в SQL это сделать легко, то используя ORM приходится изобретать велосипеды. ORM Propel позволяет это сделать без костыля через инструменты ->condition() и ->combine().

Рассмотрим сложный пример, чтобы можно было из него выделить много полезного для себя.

К примеру нам нужно в WHERE вставить вот такое условие:

Есть товары, который нужно выбрать из категории по такому принципу.

(A && B && C) OR D

A - (user) - создавший товар Юзер.

B - (price) - цена товара

С - (stock) - количество товара

D - (ignore) - флаг отвечающий за "выводить влюбом случае"

Пример реализации:

<?php
Products::create()
    ->condition('user', 'Products.User = ?', 10) // 10 - Id юзера
    ->condition('price', 'Products.Price > ?', 5000) // Цена больше 5000
    ->condition('stock', 'Products.Stock > ?', 0) // Количество больше 0
    ->combine(['user','price', 'stock'], 'and', 'u_p_s') // объеденяем условия в одно
    ->condition('ignore', 'Products.Ignore = ?', 1) // Если 1 то товар показывать в любом случае
    ->where(['u_p_s','ignore'], 'or') // Сравниваем 2 условия
    ->find();

1763 0

Комментарии

Пока нет ни одного отзыва. Оставьте отзыв первым
Только авторизованные пользователи могут оставлять комментарии Вход

Похожие статьи

Создать и скачать CSV на PHP

Рассмотрим возможность быстрого создания CSV файла с автоматическим скачиванием файла. Рассмотрим формирование, разделители и header для возможности скачать файл.