Kohana сложный запрос посредством ORM

ShadowsMind

Новичок
Всем привет.
Что-то никак не выходит построить запрос с выборкой из 2ух таблиц. Структура такая
Заказы: id | sum | date | time | status
PHP:
<?php defined('SYSPATH') or die('No direct script access');
class Model_Order extends ORM {
    /*
    * 1. Связь с таблицей Products:
    * один Заказ может включать в себя много продуктов.
    */
    protected $_has_many = array(
      'product' => array(
              'model' => 'Product',
              'foreign_key' => 'order_id',
          )
    );
}
Продукты: id | order_id | name | type | price | sale
PHP:
<?php defined('SYSPATH') or die('No direct script access.');
class Model_Product extends ORM {
    /*
    * 1. Связь с таблицей Orders:
    * много продуктов в корзине могут относиться к одному заказу
    */
    protected $_belongs_to = array(
      'order'  => array(
              'model'      => 'Order',
              'foreign_key' => 'order_id',
          )
    );
}
Что нужно: получить список всех продуктов за определенный месяц(исходя из заказов за месяц), сгруппировать продукты по имени и получить их количество и общую сумму для каждого продукта.
С выборкой внутри продуктов разобрался, а вот как их взять для конкретной даты(которая содержится в Заказах-дата) никак понять не могу, как то у меня не очень дело с Join, with и т.д....
Примерно так я делаю запрос для Продуктов:
PHP:
public function get_products_info() {
$product= ORM::factory('Product');
$products_info = $product
           ->select(array(DB::expr('COUNT(`name`)'), 'number'))
           ->select(array(DB::expr('SUM(`price`)'), 'sum'))
           ->select(array(DB::expr('SUM(`sale`)'), 'sum_sale'))
           ->group_by('name')
           ->find_all();
            //Для наглядности покажу как примерно вывожу
            foreach($products_info as $dish) {
                echo $dish->product . ": " . $dish->sum . "/" . $dish->sum_sale . "/" . $dish->number;
                echo "</br>";
           }
}
Буду очень благодарен за любую помощь/подсказку. С QB не дружу, но если кто подскажет как на нем написать подобное с радостью рассмотрю вариант.
 
Последнее редактирование:

Здыхлик

Kohaner
Команда форума
Что мешает добавить where('date', '=', $date) ? Или я что-то не понимаю?
 

ShadowsMind

Новичок
Что мешает добавить where('date', '=', $date) ? Или я что-то не понимаю?
мешало то, что в таблице Products нету поля date(вот я и спрашивал как можно через связи выбрать продукты, которые относятся к заказам сделанным в определенный период). Решил проблему 2мя запросами. Первым я - получаю номера заказов за определенный период, а вторым - получаю продукты order_id которых соответствует полученным id из первого запроса.
Как обычным SQL все это сделать в рамках одного запроса я знаю, а вот на ORM как то постоянно не складывается со сложными запросами.
 

php_coder

Новичок
Всем доброго времени суток. Тоже сабж, только таблиц три:
movies (поля: movieId, ..., ...), genres (поля: genreId, genre) и movies_genres(поля: movieId, genreId).
Запилил фильтр, который выбирает фильмы из БД по жанрам.
Краткий вариант выглядит примерно так:
$movies = ORM::factory('Movie')->where('movieId', 'in', DB::expr("(select movieId from movies_genres where genreId in (select genreId from genres where genre in ($str)))"))->find_all();
В $str помещается строка, пришедшая из формы (типа: 'Фантастика, Боевик').
Всё работает. Но запрос внутри запроса внутри запроса - это попахивает быдлокодом.
Можно ли как-то более изящно выстроить запрос к БД.
 
Сверху