我创建了3个表:users,roles和role_user。
用户模型:
public function roles()
{
return $this->belongsToMany('Role');
}
没关系,我可以得到关系
$roles = User::find(1)->roles;
但是当我改变了
$roles = User::where('name', 'Test')->get()->roles;
Undefined property: Illuminate\Database\Eloquent\Collection::$roles
这是错误的,或者找到','其中'有区别吗? 如果我想在哪里使用获取关系,我该怎么办?
答案 0 :(得分:23)
get()
get()
只执行您构建的任何(选择)查询。在任何情况下,它都会返回一个集合(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
first()
first()
返回第一条记录,因此即使结果可能包含多条记录,您也会得到一个模型
$user = User::where('id', 1)->first();
返回与
相同的内容$user = User::find(1);
您希望使用first()
代替get()
$roles = User::where('name', 'Test')->first()->roles;
答案 1 :(得分:0)
get
返回一个集合,find
返回单个模型。很明显,你不能在用户集合上调用->name
。
User::find(1); // single User model
User::find([1,2,3]); // collection of User models
User::get(); // collection of User models
还有其他方法返回查询结果,例如:
User::first(); // single User model
User::pluck('name'); // single value of name field of the first row
依旧...... read the docs