Я пытаюсь получить все «книги», которые есть у одного пользователя: но я не могу сделать это, как мне нужно.
Я использую следующий код:
/*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