我正在尝试获取一个用户拥有的所有“书”:但是我无法做到我所需要的。
我使用以下代码:
/*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-内部服务器错误):
{
"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}}
很少见,因为当我使用“选择”方法时,数据表可完美运行...
此代码有效:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句