我使用Eloquent获取数据,得到一个集合,之后我又通过
collection push进去是不会改变成array的,这一点可以直接 dump($collection->push(['city' => 'Beijing','sales' => 234])
) 验证,
@Kurisu 恩恩,谢谢,确实是这样的,它始终是一个 object,但是在调用的时候却出了问题,
他只能这样调用
public function transform($data)
{
var_dump($data);//返回是一个object,但却只能想下面这样取值
return [
'x' => $data['x'],
'y' => $data['y']
];
}
而不是 像我之前的用法
public function transform($data)
{
return [
'x' => $data->x,
'y' => $data->y
];
}
所以这是我纠结的地方
@Kurisu 我只知道,当直接通过eloquent orm 获取到的集合,自己不对集合做操作时,传到 transformer中可以通过'x' => $data->x,
这样去获取值,但是只要对查询到的集合自己做一下处理,当传到transformer中 这样'x' => $data->x,
就会报错,就只能通过 'x' => $data['x'],
这种方式了
我尝试了一个这样的例子
public function testA()
{
$colloction = collect([ 'a' => 1 , 'b' => 2]);
dump($collection);
$collection->put('c',3);
dump($collection);
dump($collection['a']);
dump($collection->a);
dump(User::all()->first());
}
而到$collection->a会报错,
而 ->
这个符号的意思是调用$collection里的某个方法或者属性,
我猜测是User类的实例有 _get 这种拦截器魔术方法,在未被定义的属性被调用时触发,返回调用的某个属性,而这种自己put进去的没有这个方法
@Kurisu 非常感谢您,我自己也是试了一下,只要我对模型获取的到的集合进行操作,那个集合就会变成 Illuminate\Database\Eloquent\Collection
下面的,然而,我不对模型获取的到的集合进行操作时,他就是 App\Models\CitySales
下面的,所以应该就像您所说的是是Model类下的问题
推荐文章: