Laravel 查询生成器 returns 对象还是数组?
Laravel query builder returns object or array?
我正在使用 Laravel 构建一个非常简单的网络应用程序。
我构建了两个独立的控制器,每个控制器 return 两个独立的视图,如下所示:
配置文件控制器:
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
and/or first
并期望两者得到相同类型的结果,因为我想从同一个 table 得到相同的东西?
get()
returns每次都是对象集合。该集合中可能有 0 个或多个对象,具体取决于查询结果。
first()
在幕后调用 get()
,但不是返回结果集合,而是 returns 集合中的第一个条目(如果有的话)。
使用哪种方法取决于您的需要。您是需要所有结果的集合(使用 get()
),还是只想要集合中的第一个结果(使用 first()
)?
- 模型::查找(数字); returns 一个对象
- Model::whereId(numeric)->first(); returns 一个对象
- Model::whereId(numeric)->get(); - returns 一个集合
- 模型::whereId(数字); - returns 一名建筑师
我正在使用 Laravel 构建一个非常简单的网络应用程序。
我构建了两个独立的控制器,每个控制器 return 两个独立的视图,如下所示:
配置文件控制器:
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
and/or first
并期望两者得到相同类型的结果,因为我想从同一个 table 得到相同的东西?
get()
returns每次都是对象集合。该集合中可能有 0 个或多个对象,具体取决于查询结果。
first()
在幕后调用 get()
,但不是返回结果集合,而是 returns 集合中的第一个条目(如果有的话)。
使用哪种方法取决于您的需要。您是需要所有结果的集合(使用 get()
),还是只想要集合中的第一个结果(使用 first()
)?
- 模型::查找(数字); returns 一个对象
- Model::whereId(numeric)->first(); returns 一个对象
- Model::whereId(numeric)->get(); - returns 一个集合
- 模型::whereId(数字); - returns 一名建筑师