我正在使用 Laravel 构建一个非常简单的网络应用程序。
我构建了两个单独的控制器,每个控制器返回两个单独的视图,如下所示:
配置文件控制器:
class ProfileController extends BaseController {
public function user($name)
{
$user = User::where('name', '=', $name);
if ($user->count())
{
$user = $user->first();
$workout = DB::table('workouts')->where('user_id', '=', $user->id)->get();
Return View::make('profile')
->with('user', $user)
->with('workout', $workout);
}
return App::abort(404);
}
}
锻炼控制器:
class WorkoutController extends BaseController {
public function workout($name)
{
$workout = DB::table('workouts')->where('name', '=', $name)->first();
if ($workout)
{
Return View::make('add-exercise')
->with('workout', $workout);
}
return App::abort(404);
}
}
让我困惑的是我必须做什么才能通过单项考试workout
反对每一种观点。您可能已经注意到查询构建器workout
是不同的:
$workout = DB::table('workouts')->where('user_id', '=', $user->id)->get();
and
$workout = DB::table('workouts')->where('name', '=', $name)->first();
On the profile
视图,我使用以下方法得到一个对象->get();
方法,但在add-exercise
视图,我必须使用->first();
否则我将得到一个只有一个索引的数组,然后我可以在其中访问该对象,即$workout[0]->name
代替$workout->name
.
为什么是这样?我不应该使用get
and/or first
在两个控制器中,并期望两个控制器得到相同类型的结果,因为我想从同一个表中获得相同的结果?