我通常与雄辩的拉拉维尔分开选择我的项目
$b = Booking::where("id","=",$id)->get();
我得到的是一个带有一个项目的照明\数据库\雄辩\集合。 稍后我将它们放在一个数组中,以便我有一个这些 Illuminate\Database\Eloquent\Collection 对象的数组。
但是有时我需要更多,所以我做了这样的事情:
$bs = Booking::where("date","=",$today)->get();
现在,这是一个包含多个项目的集合。有没有一种简单的方法可以将 Illuminate\Database\Eloquent\Collection 中的多个项目更改为具有单个项目的 Illuminate\Database\Eloquent\Collection?
当然我可以这样做:
$bs = Booking::where("date","=",$today)->get();
foreach ($bs as $i=>$b) $bs2[] = Booking::where("id","=",$b->id)->get();
但是从DB中再次选择似乎是一个非常愚蠢的解决方案。
编辑:
如果我这样做,我有:
- $bs作为"收藏"对象,里面有 15 个"预订"对象。
- $bs 1 作为一个数组,包含 15 个"收藏"对象,每个对象内部包含 1 个"预订"对象。(这就是我想要的(
->toArray(( 创建一个包含 15 个数组的数组。那不是我想要的——我需要这些对象。由于雄辩提供了诸如日期字段之类的功能,因此自动成为日期时间对象
使用toArray()
函数,您就可以开始了,
$bs = Booking::where("date","=",$today)->get()->toArray();
现在,您将拥有从数据库返回的数据数组。
你可以这样做:
$bs = Booking::where("date","=",$today)->get();
foreach ($bs as $i=>$b) {
$bs2[] = collect([$b]);
}
这为您提供了一个IlluminateSupportCollection
集合的数组,每个集合都有一个项目。
如果您需要IlluminateDatabaseEloquentCollection
集合:
$bs2[] = new IlluminateDatabaseEloquentCollection([$b]);
尝试以下操作。
$bs = Booking::where("date", "=", $today)->get();
$new_bs = $bs->toArray();
您可以使用->all()
方法。 您遇到的问题是因为在使用->toArray()
时,Laravel 将集合转换为数组,并且作为 Arrayable 实例的嵌套对象也被转换。
这里解释 - 拉拉维尔文档
文档中all()
方法