Laravel查询构建器返回对象或数组?

Tia*_*ago 8 php query-builder laravel eloquent

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

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

ProfileController可:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

WorkoutController:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

令我困惑的是我为了将单个workout对象传递给每个视图而必须做的事情.您可能已经注意到查询构建器workout是不同的:

$workout = DB::table('workouts')->where('user_id', '=', $user->id)->get();
Run Code Online (Sandbox Code Playgroud)

$workout = DB::table('workouts')->where('name', '=', $name)->first();
Run Code Online (Sandbox Code Playgroud)

profile视图中,我使用该->get();方法得到一个对象,但是在add-exercise视图上,我必须使用->first();或者我将获得一个只有一个索引的数组,然后我可以访问该对象,即$workout[0]->name代替$workout->name.

为什么是这样?我不能同时使用get和/或first在两个控制器中使用同一类型的结果,因为我想从同一个表中得到相同的东西吗?

pat*_*cus 17

get()每次都返回一个对象集合.该集合中可能包含0个或更多对象,具体取决于查询结果.

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

您使用哪种方法取决于您的需求.您是否需要收集所有结果(使用get()),或者您只是想要收集(使用first())中的第一个结果?

  • 如果没有找到行`first()`返回`null` (5认同)