gpt4 book ai didi

php - Laravel toArray() 仍然返回 DB::raw 中的对象

转载 作者:行者123 更新时间:2023-12-03 02:45:59 26 4
gpt4 key购买 nike

我有这个代码:

 $response['data'] = DB::table('customers')
->select(DB::raw('name,email,address1,address2,postalcode,state_region,country_code,phone,created_at'))
->where('user_id',"=",Auth::user()->id)
->where('name','like',"%$search_value%")
->orWhere('address1',"%$search_value%")
->orWhere('email','like',"%$search_value%")
->orWhere('address2','like',"%$search_value%")
->orWhere('city','like',"%$search_value%")
->orWhere('postalcode','like',"%$search_value%")
->orWhere('state_region','like',"%$search_value%")
->orWhere('country_code','like',"%$search_value%")
->orWhere('phone','like',"%$search_value%")
->orderBy('name', $order)
->limit($length)
->offset($start)
->get()->toArray();

这个的结果是这样的:

'data' => 
array (size=10)
0 =>
object(stdClass)[194]
public 'name' => string '|Barbara User' (length=13)
public 'email' => string 'email@email.com' (length=16)
public 'address1' => string 'address aaddress' (length=17)
public 'address2' => null
public 'postalcode' => string '00000000' (length=10)
public 'state_region' => string 'GA' (length=2)
public 'country_code' => string 'US' (length=2)
public 'phone' => string '12312312312' (length=10)
public 'created_at' => string '2017-01-02 15:20:20' (length=19)
1 =>
object(stdClass)[201]
public 'name' => string '|Barbara User' (length=13)
public 'email' => string 'email@email.com' (length=16)
public 'address1' => string 'address aaddress' (length=17)
public 'address2' => null
public 'postalcode' => string '00000000' (length=10)
public 'state_region' => string 'GA' (length=2)
public 'country_code' => string 'US' (length=2)
public 'phone' => string '12312312312' (length=10)
public 'created_at' => string '2017-01-02 15:20:20' (length=19)
....

如您所见,即使我已经执行了 toArray(),结果中仍然存在一个对象。

这里似乎有什么问题?

我们将非常感谢您的帮助!谢谢!

最佳答案

当您调用toArray()时在Collection上,如果底层项目实现 Illuminate\Contracts\Support\Arrayable接口(interface),集合将尝试调用toArray()在每个项目上。但是,当您使用查询生成器时,结果将是 CollectionstdClass对象,以及stdClass对象是不实现该接口(interface)并且没有 toArray() 的普通对象。方法。因此,当您调用toArray()时在Collection上的stdClass对象,你只会得到 stdClass 的普通数组返回对象。

如果您使用 Eloquent,请定义 Customer模型,并使用该模型执行查询,您的结果将是 CollectionCustomer模型,并且这些模型确实实现了 Arrayable界面。所以,当您调用toArray()时关于这个Collection ,它会调用toArray()关于 Collection 中的每一项,你的结果将是一个数组的数组。

如果由于某种原因您不想使用 Eloquent,则需要手动将项目从对象转换为数组。您可以使用 map 轻松完成此操作或transform Collection 上的方法。使用map如果你想返回一个新的Collection并保留原始的,或使用 transform如果你只是想修改原来的Collection .

$response['data'] = DB::table('customers')  
// query conditions, etc
->get()
->map(function ($item, $key) {
return (array) $item;
})
->all();

关于php - Laravel toArray() 仍然返回 DB::raw 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41447275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com