Intereting Posts
Суперглобалы не могут быть доступны через переменные переменные в функции? PHP / MySQL: копировать таблицу и данные из одной базы данных в другую Как можно использовать многопоточность в PHP-приложениях если утверждения в php-шаблонах с использованием tpl Проверьте, содержит ли строка одно из нескольких слов PHP Phpmyadmin не выполняется, но работают другие скрипты php Как экспортировать таблицу html в excel или pdf в php Использование curl в php с «сертификатом CA, сертификатом клиента и приватным ключом» в отдельных файлах date () возвращает неправильный день, хотя временная метка верна! Как использовать модели в очереди Laravel Предупреждение при использовании mysql_fetch_assoc в PHP Symfony3 как хранить роли пользователя в базе данных Создание php включает работу в подкаталоге Получить исходный код пользовательского класса и функций? PHP встроенный вывод PDF в Google Chrome – проблема с PDF-файлами выше 150k

Laravel: Правильный способ получить Eloquent для создания вложенного SELECT

Запрос, который я пытаюсь получить красноречивым для генерации, – это

SELECT *, (SELECT COUNT(comment_id) FROM comment AS c WHERE c.approved=true AND c.blog_fk=b.blog_id) AS comment_count FROM blog AS b 

Это результат

 blog_id | title | author | blog | image | tags | created | updated | comment_count --------|-------------------|--------------|----------------|------------------|---------|---------------------|---------------------|-------------- 21 | A day.. | dsyph3r | Lorem ipsum... | beach.jpg | symf... | 2014-12-22 19:14:34 | 2014-12-22 19:14:34 | 2 22 | The pool .. | Zero Cool | Vestibulum ... | pool_leak.jpg | pool,.. | 2011-07-23 06:12:33 | 2011-07-23 06:12:33 | 10 23 | Misdirection... | Gabriel | Lorem ipsum... | misdirection.jpg | misd... | 2011-07-16 16:14:06 | 2011-07-16 16:14:06 | 2 24 | The grid ... | Kevin Flynn | Lorem commo... | the_grid.jpg | grid... | 2011-06-02 18:54:12 | 2011-06-02 18:54:12 | 0 25 | You're either ... | Gary Winston | Lorem ipsum... | one_or_zero.jpg | bina... | 2011-04-25 15:34:18 | 2011-04-25 15:34:18 | 2 

В настоящее время я выполняю этот запуск с помощью DB :: select (DB :: raw ()), что, вероятно, не является правильным способом для этого.

Вопрос в том, что является правильным способом получить красноречивое представление запроса, который генерирует эти результаты?

Используйте это вместо этого: http://softonsofa.com/tweaking-eloquent-relations-how-to-get-hasmany-relation-count-efficiently

И для вложенного оператора select / join вам понадобится следующее:

 $sub = Comment::selectRaw('count(comment_id) as count') ->where('approved', '?') ->where('comment.blog_fk', '?') ->toSql(); Blog::selectRaw(DB::raw("blog.*, ({$sub}) as comment_count")) ->setBindings([true, DB::raw('blog.blog_id')], 'select') ->get(); 

Или просто поместите все в selectRaw .

Вы можете использовать laravel ELoquent с нетерпеливой загрузкой. Я предлагаю вам изучить отношения laravel, чтобы получить полное преимущество laravel. Кстати, как только вы определили взаимосвязь между этими двумя моделями, приведенный ниже код может сработать для вас.

 $users = Blog::with(array('Comment' => function($query) { $query-> where('approved','=',true)-> select(DB::raw('Count(comment_id) as comment_count')); }))->get();