例如我有:
// Returns all projects
$projects = Projects::all();
要返回属于项目的类别,我使用关系并可以执行以下操作:
foreach($projects as $project) { ...show $project->categories... }
我只需要特定的项目,然后是特定的用户。在我的projects_followers
表格中,我有user_id
和project_id
。
要检索所遵循的项目,我有这样的代码安静:
$projects = Project::rightJoin(DB::raw('(select * from projects_followers group by project_id) projects_followers'),'projects_followers.project_id','=','projects.id')->get();
// Note: This code doesn't include specifuc user_id.
它确实检索了特定的行,但是这段代码的问题在于laravel关系对它们不起作用。例如$project->categories
返回空。
// Relationship
public function categories()
{
return $this->belongsToMany('App\Category');
}
如何检索特定于模型的行并使关系起作用?
答案 0 :(得分:1)
其实你的问题是:
如何获得Auth / Logged in User喜欢/遵循的项目?
不幸的是,你以这样的方式描述它,无论如何它看起来像别的东西。让我们试着找到解决方案,为此我想使用这样的东西:
$projects = Auth::user()->favorite_projects;
所以我们如何实现这一点,首先User Model
应该包含方法favoriteProjects
所以让我们创建它:
public function favoriteProjects()
{
return $this->belongsToMany(
'App\Project',
'projects_followers', // This table already exists as you mentioned
'user_id',
'project_id'
);
}
就是这样。您将能够加载当前用户后面的项目,其他关系方法也适用于每个项目。
答案 1 :(得分:0)
我的解决方法:
// I don't know how to create empty collection, so impossible conditions here.
$projects = Project::where('id', 0)->get();
$follows = DB::table('projects_followers')->where('follower_id', Auth::user()->id)->get();
foreach($follows as $follow) {
$project = Project::where('id', $follow->project_id)->first();
$projects = $projects->add($project);
}