Я пытаюсь получить все «книги», которые есть у одного пользователя: но я не могу сделать это, как мне нужно.
Я использую следующий код:
/*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 – Internal Server Error):
{ "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 } }
Кто-нибудь знает решение?
РЕДАКТИРОВАТЬ:
Когда я дважды использую метод 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}}
Редко, потому что, когда я использовал метод «select», Datatables работал отлично …
Этот код работает:
Books::select(array('id', 'name', 'type'));
Но код, который вы мне сказали, не работает:
$user = User::find(1); $user->books()->getQuery()->getQuery();
Использовать метод call 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