Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 3 » Генерация SQL-подзапроса в Fluent Query - возможна? » 28.10.2012 17:53:46

Freeman, спасибо в любом случае, вопрос уже решен... просто выспаться надо было... smile

#2 Re: Laravel 3 » Генерация SQL-подзапроса в Fluent Query - возможна? » 27.10.2012 11:01:35

А планируется переработка Laravel для возможности изменения ядра или это приницпиальное у разработчика (типа bcrypt'a)? Просто подумываю, может форкнуть...

#3 Re: Laravel 3 » Генерация SQL-подзапроса в Fluent Query - возможна? » 26.10.2012 13:08:36

То что код там более чем нормально написанный, это да, читается легко. А при помощи PHPStorm так вообще никаких проблем. Но вот задаю вопросы для того чтобы узнать "True Way". Т.е. те кто уже давно пишут на фреймворке те уже выработали какой-то набор правил, куда выносить "обертки", какие способы расширения...

Query, к сожалению, пришлось заменить в коде, так как там жестко прописано было use Laravel/Paginator, и неважно что было переназначено... Хотя я еще не разобрался с автозагрузкой, в теории может получится переназначить alias. Разбираю фреймворк на реальном проекте, и сроки немного поджимали, а от Codeigniter я чешусь уже... smile

#4 Re: Laravel 3 » Генерация SQL-подзапроса в Fluent Query - возможна? » 25.10.2012 11:10:53

Да мне и самому Framework понравился... Достаточно чистая структура, нет тесно интегрированных навесок типа как в Yii, быстрый, не глюкавит как FuelPHP, очень легкий старт (напоминает Codeigniter по этому пункту), ну и не такой грузивный как Symfony и Zend, единственный это Paginator, который в принципе перекрыл уже. Не хватает немного информации расширенной конечно по нему, но благодаря таким как Вы, получил ответы на все вопросы. Некоторые вопросы еще на IRC-канале также очень много людей. smile

Блин... дурдом... 5-ый раз изменяю эту запись... цирк... big_smile
Вобщем никак не получается выполнить такую последовательность:
Запрос 1:

SELECT COUNT(DISTINCT hash_code) AS `aggregate` FROM `cars`

Запрос 2:

SELECT
 f1.hash_code, f1.field1, f1.field2
 count(firm_code) as cntm, max(f1.price) as price_max, min(f1.price) as price_min
FROM
 `cars` f1
GROUP BY f1.hash_code
ORDER BY cntm DESC

Т.е. насколько я понимаю все-таки группировку где-то надо убирать, но в этом случае, соответственно требуется уже не использовать функцию paginate, а генерировать линки вручную?

Ну или добавить в ядро "заплатку"... но как же я такие заплатки ненавижу... обновить потом ядро хрен выйдет. Надо расковырять как можно расширять ядро выносами.

  public function paginate_with_group_by($per_page = 20, $columns = array('*'))
  {
    // Because some database engines may throw errors if we leave orderings
    // on the query when retrieving the total number of records, we'll drop
    // all of the ordreings and put them back on the query.
    list($orderings, $this->orderings) = array($this->orderings, null);

    $temp_distinct = $this->distinct;
    $temp_groups = $this->groupings;
    $this->distinct();
    $this->groupings = null;
    $total = $this->count(reset($columns));
    $this->distinct = $temp_distinct;
    $this->groupings = $temp_groups;

    $page = Paginator::page($total, $per_page);
    $this->orderings = $orderings;

    // Now we're ready to get the actual pagination results from the table
    // using the for_page and get methods. The "for_page" method provides
    // a convenient way to set the paging limit and offset.
    $results = $this->for_page($page, $per_page)->get($columns);

    return Paginator::make($results, $total, $per_page);
  }

#5 Re: Laravel 3 » Генерация SQL-подзапроса в Fluent Query - возможна? » 25.10.2012 09:04:05

Куда пиво/кофе/водку слать?.. smile))
Блин, у меня  тут  крышу уносило уже, начал с JOIN и прочими вещами закапываться... А простое решение даже не попробовал... Чегой-то казалось что... вобщем ну его... пора спать smile

PS: одна только проблема еще осталась, попробую ее раскопать, но интересная...
При этом запросе данные соответственно передаются в $db->paginate, а уже Paginator штатный, делает первый запрос

SELECT COUNT(id) AS `aggregate` FROM `cars` GROUP BY hash_code

Как итог, получаем количество страниц равное 1. Если исключаем GROUP_BY, то соответственно все работает корректно... кроме самого запроса... smile

#6 Laravel 3 » Генерация SQL-подзапроса в Fluent Query - возможна? » 24.10.2012 23:05:27

Vertex
Ответов: 11

Добрый вечер уважаемое Сообщество.

Не спрашивайте зачем это надо, к сожалению, не всегда архитектура системы позволяет сделать по-человечески, и изредка приходится ставить "костыли"... Итак, есть примерно такая таблица (будем мучать как пример вечно запиленную автомобильную тему):

price_table
id, field1, field2, field3, price, id_firm, hash

Поле "hash" это уникальное поле, показывающее наличие одного и того же автомобиля у разных источников информации. Необходимо выбрать одну строку группируясь по хешу и указать количество одинаковых хешкодов существующих в разных источниках.

Запрос вот такой:

SELECT
  p1.*,
  (SELECT count(*) FROM price_table p2 WHERE p2.hash = p1.hash) as count_hash
FROM
  price_table p1
WHERE ...
GROUP BY p1.hash
ORDER BY ...
LIMIT ...
OFFSET ...

все получается кроме вот только конструкции вложенного селекта этого... Подскажите возможно ли так сделать в Fluent Query или ставить RAW запрос полный и забить на внутренние эти всякие "вспомогалки"?

Подвал раздела