Laravel使用Eloquent::get()查询返回模型而非原始数据问题排查
问题原因说明
这不是异常错误,是Laravel Eloquent ORM的默认设计:
- Eloquent的
get()查询方法默认返回Illuminate\Database\Eloquent\Collection集合对象,集合内的每个元素都是对应表的模型实例,目的是方便你后续调用模型的关联、访问器、修改器等扩展功能。 - 你在tinker里查询返回模型、迁移后结果不变都是正常表现,和数据库本身没有关系。
解决方案
根据你的使用场景可以选择以下任意一种方法:
1. 保留Eloquent能力,仅获取原始数据
如果后续还有使用模型功能的需求,读取字段时直接访问模型属性即可,比如Blade模板内遍历输出:
@foreach($products as $product) <div> 商品名称:{{ $product->Product_name }} 商品价格:{{ $product->Product_price }} </div> @endforeach
如果需要直接得到数组格式的全量原始数据,在查询后追加toArray()方法即可:
$products = Product::get()->toArray();
2. 不需要Eloquent能力,直接查原始数据
如果你完全不需要用到模型的扩展功能,可以直接用查询构造器查询,返回的是stdClass对象组成的集合,更贴近原始数据:
// 返回stdClass对象集合 $products = \DB::table('products')->get(); // 追加toArray()可转为纯数组 $products = \DB::table('products')->get()->toArray();
内容的提问来源于stack exchange,提问作者Nemoko
相关产品推荐
相关产品推荐

