如何传递多对多关系以查看数组[Laravel 5]
How to pass many to many relations to view as array[Laravel 5]
我尝试通过数组来查看我的关系....我有用户和项目 table 实际....
这是用户模型:
public function projects(){
return $this ->belongsToMany('App\Project','project_user');
}
public function getUserList(){
return $this -> projects;
}
这是我的家庭控制器:
public function project(User $project){
$this -> selected = $project;
return view('projects',array('selected' =>$project -> selected -> getUserList()->lists('id') ));
}
注意
如果我更换家庭控制器,这一行:
return view('projects',array('selected' => $project -> selected -> getUserList()->lists('id') ));
进入这个:
return view('projects',array('selected' => Auth::user -> getUserList()->lists('id') ));
它工作正常...
有人知道为什么它现在可以使用方法注入吗?
简短回答:Laravel 不知道在您对 User 模型进行类型提示时该怎么做。
更长的答案:由于当前登录用户的信息存储在 Laravel 代码的身份验证部分,一种选择是类型提示 Illuminate\Contracts\Auth\Guard
接口(API docs) 在你的方法描述符中获取它的一个实例。
然后您可以使用 user
属性 访问反映当前登录用户的用户模型实例。这段代码基本上就是您在此处已有的代码:Auth::user -> getUserList()->lists('id')
.
在 Illuminate\Contracts
内部使用 Guard
接口的好处是,如果包或服务提供商重新定义 Guard
接口的具体实现(这样做的原因是换出 如何 身份验证在您的应用程序中工作),您的代码将不需要更改,因为它绑定到该接口定义的合同,而不是使用 Auth
门面它可能不再以相同的方式运行。
希望对您有所帮助!欢迎提问:)
我尝试通过数组来查看我的关系....我有用户和项目 table 实际....
这是用户模型:
public function projects(){
return $this ->belongsToMany('App\Project','project_user');
}
public function getUserList(){
return $this -> projects;
}
这是我的家庭控制器:
public function project(User $project){
$this -> selected = $project;
return view('projects',array('selected' =>$project -> selected -> getUserList()->lists('id') ));
}
注意
如果我更换家庭控制器,这一行:
return view('projects',array('selected' => $project -> selected -> getUserList()->lists('id') ));
进入这个:
return view('projects',array('selected' => Auth::user -> getUserList()->lists('id') ));
它工作正常...
有人知道为什么它现在可以使用方法注入吗?
简短回答:Laravel 不知道在您对 User 模型进行类型提示时该怎么做。
更长的答案:由于当前登录用户的信息存储在 Laravel 代码的身份验证部分,一种选择是类型提示 Illuminate\Contracts\Auth\Guard
接口(API docs) 在你的方法描述符中获取它的一个实例。
然后您可以使用 user
属性 访问反映当前登录用户的用户模型实例。这段代码基本上就是您在此处已有的代码:Auth::user -> getUserList()->lists('id')
.
在 Illuminate\Contracts
内部使用 Guard
接口的好处是,如果包或服务提供商重新定义 Guard
接口的具体实现(这样做的原因是换出 如何 身份验证在您的应用程序中工作),您的代码将不需要更改,因为它绑定到该接口定义的合同,而不是使用 Auth
门面它可能不再以相同的方式运行。
希望对您有所帮助!欢迎提问:)