如何返回id等于id的模型行在其他表上与laravel中的关系?

时间:2015-07-21 23:36:07

标签: php mysql laravel laravel-5

例如我有:

// Returns all projects
$projects = Projects::all();

要返回属于项目的类别,我使用关系并可以执行以下操作:

foreach($projects as $project) { ...show $project->categories... }

我只需要特定的项目,然后是特定的用户。在我的projects_followers表格中,我有user_idproject_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');
}

如何检索特定于模型的行并使关系起作用?

2 个答案:

答案 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);
  }