我正在用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())