出于某种原因,我收到了一个错误:
调用未定义的方法Illuminate \ Database \ Query \ Builder :: only()
基本上从数据库中获取条目,并且只使用only()
集合
$canvas = $this->canvasRepo->get(5);
$shapes = $canvas->shapes->each(function($shape) {
return $shape->only('name', 'height', 'width');
});
答案 0 :(得分:2)
正如所指出的,这是一种关系,所以你不能使用get()。
如果您希望查询仅从数据库中获取特定字段,则将该关系引用为方法而不是属性。
$canvas->shapes()->get(['name', 'height', 'width']);
但使用$canvas->shapes
作为属性会执行查询SELECT *
并返回一个可以使用pluck
或only
旧答案
在使用get()
或only()
从数据库中获取数据之前,您需要使用pluck()
。
$canvas = $this->canvasRepo->get(5);
$shapes = $canvas->shapes->each(function($shape) {
return $shape->get('name', 'height', 'width');
});
假设您定义了关系,这将仅返回相关形状的'name', 'height', 'width'
字段。
但是,如果您使用预先加载以避免n + 1问题会更好。
答案 1 :(得分:0)
关键是你怎么知道only()
方法合法?
在Laravel中,只有一个名为only()
的方法,它用于检索输入数据的子集。 InteractsWithInput#only
在集合实例初始化时,集合实例$shapes
的项目将转换为数组,因此您不应使用only()
方法。你可以使用laravel助手提供的array_only()
。
$shapes = $canvas->shapes->each(function($shape) {
return array_only($shape, ['name', 'height', 'width']);
});
答案 2 :(得分:-1)
我认为您应该使用pluck
代替only
来获取table
中的特定字段。
但它只适用于一个领域。所以你需要select
和get
方法。
试试这个:
$shapes = $canvas->shapes->each(function($shape) {
return $shape->select('name','height','width');
})->get();