【发布时间】:2015-03-26 09:51:37
【问题描述】:
我正在使用 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();
和
$workout = DB::table('workouts')->where('name', '=', $name)->first();
在profile 视图上,我使用->get(); 方法获得一个对象,但在add-exercise 视图上,我必须使用->first();,否则我将获得一个只有一个索引的数组,我可以然后访问对象,即$workout[0]->name 而不是$workout->name。
这是为什么?我不应该能够在两个控制器中使用get 和/或first 并期望两者都得到相同类型的结果,因为我想从同一个表中得到相同的东西吗?
【问题讨论】:
-
否,因为使用 get() 的结果可能包含无、一个或多个对象;所以你总能拿回一个收藏;而
first()只会返回一个对象或一个对象,因此它可以返回一个直接对象而不需要集合 -
如果您来自每个
var_dump($workout),每个对象是什么类?如果我记得,->get()应该返回一个结果集合,而->first()应该返回一个代表单行的对象。 -
那是你需要让它手动的东西......!! Laravel 不能为你做到这一点..!! :)
标签: php laravel eloquent query-builder