我正在努力获得一个用户拥有的所有“书籍”:但我无法按需要这样做。
我使用以下代码:
/*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
}
}
有人知道解决方案吗?
修改
当我两次使用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 :(得分: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