Laravel Fluent добавляет select() в отдельные места?

//Earlier in the code, in each Model:
query = ModelName::select('table_name.*')

//Later in the code in a function in a Trait class that is always called

    if ($column == 'group_by')
    {
        $thing_query->groupBy($value);
        $thing_query->select(DB::raw('COUNT('.$value.') as count'));
    }

Есть ли способ добавить или включить отдельную функцию выбора в построитель красноречивых запросов?

Фактический ->select() устанавливается раньше, а затем вызывается эта функция. Я хотел бы условно добавить столбец count в эту более позднюю функцию, в которую передан запрос.


person Damon    schedule 24.06.2013    source источник


Ответы (3)


Для дальнейшего использования вы можете использовать функцию addSelect().

Было бы неплохо иметь его в документации, но вы найдете его здесь, в API: http://laravel.com/api/4.2/Illuminate/Database/Query/Builder.html#method_addSelect

person Cameron    schedule 10.02.2014
comment
Эта ссылка у меня не работает, работает вот эта: laravel .com/api/4.2/Illuminate/Database/Query/ - person Benubird; 28.01.2015

Да, вы просто вставляете блок, который хотите выполнить как функцию.... согласно документации по группировке параметров , вы можете сделать так... передав функцию Where a...

Этот код ниже, вероятно, не будет делать то, что вы хотите, но вы можете что-то построить и поиграть с ним.

DB::table('users')
        ->where('name', '=', 'John')
        ->orWhere(function($query)
        {
            $query->group_by($value);
                  ->select(DB::raw('COUNT('.$value.') as count'));
        })
        ->get();
person Kylie    schedule 24.06.2013

Попробуй это:

$thing_query->groupBy($value)->get(DB::raw('COUNT('.$value.') as count'));

Кроме того, если вы просто пытаетесь получить количество, а не выбирать несколько вещей, вы можете использовать ->count() вместо ->get().

person coffe4u    schedule 24.06.2013
comment
Это не добавляет количество к моим другим запросам на выбор, просто возвращает его само по себе - person Damon; 25.06.2013