2016-08-10 3 views
1

Я пытаюсь написать scope, и мне нужно знать, добавили ли какие-либо из предыдущих областей какие-либо -> выберите() информацию раньше, а если нет, добавьте ее (которая стирает предыдущие вещи).Laravel 5 Eloquent - как получить столбцы областей

Область получает объект $ запроса, который является \ Осветите \ Database \ Query \ Builder (согласно документации в любом случае)

Если я смотрю в Builder.php я вижу свойство $ столбцов, который используется для хранения столбцы для выборки

/** 
* The columns that should be returned. 
* 
* @var array 
*/ 
public $columns; 

Однако в моей компетенции, если я пытаюсь получить к нему доступ с помощью

$query->columns 

Я получаю сообщение об ошибке, говорящее:

PHP error: Undefined property: Illuminate\Database\Eloquent\Builder::$columns 

Как вы можете видеть, происходит какое-то волшебство, и он смотрит на Eloquent \ Builder, а не на Database \ Query \ Builder.

Я, вероятно, отсутствует что-то простое здесь, может быть, нужно больше кофе снова ... Все указатели приветствуются

Благодаря

PS. Я знаю, что могу использовать addSelect(), но я хотел бы знать, почему я не могу получить доступ к переменной «столбцы» еще ...

+0

Это необычная модель, к которой вы обращаетесь не к Query Builder. Чего вы пытаетесь достичь именно? –

+0

Нет, это не модель, область получает конструктор запросов. См. Красноречивое руководство. Страница связана с вопросом. Нажмите на область действия, которая имеет ссылку. –

ответ

1

Объект, который переходит в руки вашей рамки метод класса Illuminate \ Database \ Eloquent \ Builder, тогда как класс, который имеет столбцы , равен Illuminate \ Database \ Query \ Builder. Объект первого класса использует внутренне объект второго класса, так что если вы хотите получить доступ к его общие свойства, что нужно сделать:

public function scopeFunction($query) { 
    $columns = $query->getQuery()->columns; 
} 

Имейте в виду, что некоторые области применения могут быть применены после того, как ваша сфера называется и изменить $ column атрибут после запуска области.

+0

Вы правы. Я сам решил это и сам вчера, но забыл опубликовать его здесь. Моя IDE не показывала getQuery() из-за того, как Laravel использует магические вызовы. Мне нужно было найти его. Мне просто нужно было найти, были ли столбцы пустыми или нет. Потому что, когда Laravel строит строку запроса, если «столбцы» пустые, по умолчанию используется значение «*», но если нет, то хорошо использует то, что в нем. Мои области применения добавили несколько соединений и выделили столбцы, поэтому, если $ columns пуст, я должен добавить некоторые базовые столбцы из первой таблицы, которая будет показана. (или только присоединившиеся столбцы таблицы были показаны) –