Я пытаюсь получить все «книги», которые есть у одного пользователя, но я не могу сделать это так, как мне нужно.
Я использую следующий код:
/*Gets all books from the user whose id is 1*/
$books= User::find(1)->books();
Что верни мне Collection
объект; но мне нужен Builder
объект, как я получаю, когда я использую метод «выбора».
/* 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();
Используйте вызов метода 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
Других решений пока нет …