2016-10-21 1 views
-1

У меня есть этот запрос в Laravel:Получить более чем один или все свойства объединения: SELECT, COUNT, OrderBy

$filmxlanguages =DB::table('films') 
       ->join('languages', 'languages.id', '=", 'films.language_id') 
       ->select('languages.language', DB::raw('count(*) as total')) 
       ->orderBy('languages.language') 
       ->get(); 

И это работает отлично отдавая имя языка (languages.languages ​​и всего фильмов про язык) в виде простой таблицы, как этот

<table> 
    <thead> 
     <th>Language</th> 
     <th>Number of films</th> 
    </thead> 
    <tbody> 
    @foreach ($filmxlanguage as $language) 
     <tr> 
     <td> {{ $language->language}}</td> 
     <td> {{ $language->total}}</td> 
    </tr> 
    @endforeach 
    </tbody> 
</table> 

Теперь я хочу провести еще свойства, чтобы добавить столбец к моему столу, как: language-> изображение и добавить ссылку с помощью слизняка, что у меня есть в базе данных подобные

<td> <a href ="{{ route('language.show', $language->slug)}}">{{ $language->language}}</a></td> 

Я добавил два свойства Выбор без успеха, как, что:

$filmxlanguages =DB::table('films') 
       ->join('languages', 'languages.id', '=", 'films.language_id') 
       ->select('language.slug', language.image', 'languages.language', 
        DB::raw('count(*) as total')) 
       ->orderBy('languages.language') 
       ->get(); 

Как это получить больше, чем один или все свойства в Laravel с помощью SELECT, и COUNT?

EDIT:

Я изменил код так:

$filmsxlanguage = DB::table('films') 
    ->join('languages', 'languages.id', '=', 'films.language_id') 
    ->select('*', DB::raw('count(*) as total')) 
    ->groupBy('languages.language') 
    ->get(); 

Но это не работает

ответ

1

Удалить ->select() из вашего конструктора запросов, чтобы получить все столбцы по умолчанию.

Если вы хотите сохранить агрегатную функцию как столбец, например total, вы можете написать ->select('*', DB::raw('count(*) as total'));

Кроме того, ваш строитель запросов пропустит апостроф в language.image. Должно быть так:

$filmxlanguages =DB::table('films') 
      ->join('languages', 'languages.id', '=", 'films.language_id') 
      ->select('language.slug', 'language.image', 'languages.language', 
       DB::raw('count(*) as total')) 
      ->orderBy('languages.language') 
      ->get(); 

UPDATE Я думаю, что реальная проблема не в выберите(). Он может быть связан с SQL_MOD. Проверьте ваш app/config.php в sql части, попробуйте изменить 'strict'=>false/true Пожалуйста, смотрите здесь для получения дополнительной информации github.com/laravel/framework/issues/14997

+0

мне нужно в общей сложности для того, чтобы использовать его в передней части. Поэтому я использовал -> select ('*', DB :: raw ('count (*) как total')); но он возвращает ошибку: QueryException SQLSTATE [42000]: ошибка синтаксиса или нарушение прав доступа: 1055 «mykino.films.id» не находится в GROUP BY ... –

+0

Я вижу, что вы пропустите апостроф в своем построителе запросов, проверьте его снова скажите мне. – Davuz

+0

Нет, это не сработало. Я добавил полученный код в EDIT в вопросе –