2014-12-12 3 views
1

Я пытаюсь получить все «книги», которые есть у одного пользователя: но я не могу сделать это, как мне нужно.Как получить объект Builder из строк, связанных с pivot - Laravel

Я использую следующий код:

/*Gets all books from the user whose id is 1*/  
$books= User::find(1)->books(); 

Это возвращение к мне Collection объекта; но мне нужен объект Builder, поскольку я получаю, когда использую метод «select».

/* This code return me a "Builder" object */ 
Books::select(array('id', 'name', 'type')); 

Мне нужна Builder вместо Collection, потому что я с помощью Bllim/DataTables на мой проект, и этот пакет просто принять Builder объект ...

Если я пошлю ему Collection ИТС бросить мне следующую ошибку (500 - Внутренняя ошибка сервера):

{ 
    "error": 
    { 
      "type":"ErrorException", 
      "message":"Undefined property: Illuminate\\Database\\Eloquent\\Builder::$columns", 
      "file":"\/var\/www\/proyect\/myproyect\/vendor\/bllim\/datatables\/src\/Bllim\/Datatables\/Datatables.php", 
      "line":256 
    } 
} 

Кто-нибудь знает решение?

EDIT:

Когда я использую метод GetQuery() дважды я получаю следующее сообщение об ошибке:

{"error":{"type":"ErrorException","message":"array_values() expects parameter 1 to be array, null given","file":"\/var\/www\/proyect\/myproyect\/vendor\/bllim\/datatables\/src\/Bllim\/Datatables\/Datatables.php","line":550}} 

редко, потому что, когда я использовал метод "выбрать" DataTables работал отлично. ..

Этот код работает:

Books::select(array('id', 'name', 'type')); 

Но код, который вы сказали мне, не работает:

$user = User::find(1); 
$user->books()->getQuery()->getQuery(); 
+0

Может быть существует какой-либо способ получить все книги через метод «выбрать»? – MartaGom

+0

Если вы используете 'User :: find (1) -> books()' ... notice(), он позволит вам запросить набор результатов. –

+0

Извините, это ошибка «опечатки». У меня есть «()» в моем коде: но бросает мне ошибку, указанную по моему вопросу – MartaGom

ответ

2

Используйте метод вызова books():

$user = User::find(1); 

$user->books(); // relation object 
$user->books; // dynamic property 

Первого books() возвращает объект отношения, что вы можете цепь Eloquenr\Builder или Query Builder метод на.

Второй books - динамическое свойство - запрос выполняется автоматически и его результат сохраняется в $user->relations['books'] и возвращается.


редактировать

В соответствии с комментарием - то, что вам нужно, это базовый Query\Builder объект, если вы хотите получить доступ к columns собственности, так что вам нужно getQuery дважды:

$user->books() 
    ->getQuery() // get underlying Eloquent\Builder 
    ->getQuery() // get underlying Query\Builder 
    ->columns // public property on the above 
+0

Jarek Tkaczyk, извините, является ошибкой «опечатки». У меня есть «()» в моем коде: но выдает мне ошибку, указанную в моем вопросе. – MartaGom

+0

Спасибо за все ваше время. – MartaGom

Смежные вопросы