Laravel查询生成器返回对象还是数组?

我正在用Laravel构建一个非常简单的web应用程序

我构建了两个独立的控制器,每个控制器返回两个独立的视图,如下所示:

配置文件控制器:

类ProfileController扩展BaseController{
公共功能用户($name)
{
$user=user::其中(’name’,’=’,$name);
如果($user->count())
{
$user=$user->first();
$workout=DB::table(’workouts’)->其中(’user_id’,’=’,$user->id)->get();
返回视图::make(’profile’)
->with(’user’,$user)
->带(’workout’,$workout);
}
返回应用程序::中止(404);
}
}

工作控制器:

类WorkoutController扩展BaseController{
公共功能锻炼($name)
{
$workout=DB::table('workouts')->其中('name','=',$name)->first();
如果($训练)
{
返回视图::make('add-exercise')
->带('workout',$workout);
}
返回应用程序::中止(404);
}
}

让我困惑的是,为了向每个视图传递一个训练对象,我必须做什么。您可能已经注意到,训练的查询生成器是不同的:

$workout=DB::table('workouts')->其中('user_id'、'='、$user->id)->;get();

$workout=DB::table('workouts')->其中('name','=',$name)->第一个();

profile视图中,我使用->get()方法,但在添加练习视图中,我必须使用->第一个()或者我将获得一个只有一个索引的数组,在那里我可以访问对象,即$workout[0]->名称而不是$workout->名称

为什么会这样?我是否应该能够在两个控制器中使用get和/或first,并期望从这两个控制器中得到相同类型的结果,因为我希望从同一个表中得到相同的结果

get()每次返回一组对象。根据查询结果,该集合中可能有0个或多个对象

first()在引擎盖下调用get(),但它不返回结果集合,而是返回集合中的第一个条目(如果有)

你使用哪种方法取决于你需要什么。您需要所有结果的集合(使用get()),还是只需要集合中的第一个结果(使用first()

发表评论