【问题标题】:laravel relation issue in many to many case多对多情况下的laravel关系问题
【发布时间】:2017-07-18 19:33:51
【问题描述】:

我在 mysql 中有三个表: 1-用户 table of users 2个项目 table of project 3-project_user

关系有id和project_id和user_id

有两个模型:用户和项目 这些表之间的关系是belongsToMany 当一个项目创建时,一个项目可能为两个人定义 现在如何展示每个人的项目?

【问题讨论】:

    标签: laravel relation


    【解决方案1】:

    假设你正确定义了你的关系,那么做

    $users = User::with('projects')->get();
    
    //show each user projects
    foreach($users as $user) {
        echo $user->projects;
    }
    
    //Getting project users 
    $projects = Project::with('users')->get();
    

    这将为您提供项目列表,在每个列表中您可以看到哪个用户有访问权限。

    更新

    使用指定的 user_id 进行项目

    $projects = Project::with(['users' => function ($query) use ($user_id) {
        $query->where('user_id', '=', $user_id);
    }])->get();
    

    新代码 或者尝试获取用户

    $user = User::with('projects')->where('id', $user_id)->first();
    

    或通过项目,由 user_id 限制

    $projects = Project::with('users')->whereHas('users', function ($query) use ($user_id) {
        $query->where($user_id);
    })->get();
    

    【讨论】:

    • 看看有三个表有两个模型,一个模型用于用户,另一个用于项目,并且 project_user 表没有任何模式。当我为两个用户定义一个项目时,我需要只向这两个用户而不是其他用户展示该项目。这条规则在 project_user 表上。当没有任何型号时如何选择它?而这三个表是关系型的
    • 检查我的更新。您可以获取用户并查看他们的所有项目。或者获取一个项目,然后查看所有有权访问它的用户。
    • 对不起,我检查了你的更新,但有一个问题:你知道我需要在 project_user 表中获取具有特定 user_id 的项目。现在我有那个 user_id 但在你的查询中我应该如何使用它?
    • 有一个问题我有 user_id 2 我为他定义了两个项目但是当我使用你的查询显示所有项目到 user_id 2!!!
    • 我怎么能把我的桌子的图片发给你,因为我很困惑我试图解决它,但直到现在我做不到。
    【解决方案2】:

    据我了解您的问题,您想按照user_id 查询Project。这是你如何做到的。

     Project::with('users')->whereHas('users', function ($query) use ($user_id_array) {
            $query->whereIn('id',$user_id_array);
        })->get();
    

    这将为您提供user_id 来自$user_id_array 的项目。如果您需要任何进一步的帮助,请告诉我。

    【讨论】:

    • 我在 JSon 中发送用户 ID:例如我必须为用户 ID 2 进行投影。现在错误是未定义变量:user_id_array?
    • 我在 JSon 中发送用户 ID:例如,我必须为用户 ID 2 进行投影。现在错误是 Missing argument 2 for Illuminate\Database\Query\Builder::whereIn(), called in 。 ..
    【解决方案3】:

    我的解决方法:

    //save user_id
    $user_id = $request->id;
    //select in project_user where user_id = $user_id
    $project_user = DB::table('project_user')->where('user_id', '=', $user_id)->get();
    //create an empty array
    $p_id = array();
    //fill empty array with project_id
    foreach($project_user as $pro) {
    $p_id[] =  $pro->project_id;
    }
    //select code and id in project table where id = one of that [$p_id] array
    $data = Project::select('code','id')->whereIn('id', $p_id)->get();
    //return your data in json
    return response()->json($data);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-11
      • 2015-09-14
      • 2019-05-06
      • 2014-05-24
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      相关资源
      最近更新 更多