Eloquent中查找和获取的区别

hua*_*jie 11 laravel eloquent

我创建了3个表:users,roles和role_user.

用户模型:

public function roles()
{
    return $this->belongsToMany('Role');
}
Run Code Online (Sandbox Code Playgroud)

没关系,我可以得到关系

$roles = User::find(1)->roles;
Run Code Online (Sandbox Code Playgroud)

但是当我改变的时候

$roles = User::where('name', 'Test')->get()->roles;
Run Code Online (Sandbox Code Playgroud)

Undefined property: Illuminate\Database\Eloquent\Collection::$roles

那是错误的还是'找','哪里'有区别?如果我想在哪里使用获取关系,我该怎么办?

luk*_*ter 26

get()

get()只需执行您构建的任何(选择)查询.它会在任何情况下返回一个collection(Illuminate\Database\Eloquent\Collection).这就是您的错误消息的原因.你想要$roles一个模型,但是你试图从一个集合中获取它,这显然是不可能的.

find()

find()用于通过其主键获取一个或多个模型.返回值将是单个模型,集合或未找到记录.null

用途

$user = User::find(1); // returns model or null
$users = User::find(array(1, 2, 3)); // returns collection
Run Code Online (Sandbox Code Playgroud)

相当于 first()

first() 返回第一条记录,因此即使结果可能包含多条记录,您也可以获得单个模型

$user = User::where('id', 1)->first();
Run Code Online (Sandbox Code Playgroud)

返回相同

$user = User::find(1);
Run Code Online (Sandbox Code Playgroud)

你要使用的意思是first()代替get()

$roles = User::where('name', 'Test')->first()->roles;
Run Code Online (Sandbox Code Playgroud)