从4个表中获得一个集合

时间:2019-09-08 09:22:13

标签: laravel eloquent

大家早上好, 我有4张桌子:

组织

  • id
  • 名称

用户

  • id
  • 名称

Organization_user

  • user_id
  • organization_id
  • role_id

角色

  • id
  • 标签

因此,我想为用户获得他所拥有的所有组织。 我无法正确理解我应该使用Eloquent中的哪种关系...

编辑:

谢谢您的回答。但是我仍然在阻止我的关系。 我想列出一个用户所拥有的角色的所有组织。 用户在每个组织中只能有一个角色。 这是我目前的恋情:

组织用户模型

public function update($id, Request $request)
{
    $input = $request->all();
    $product= \App\Product::find($id);

    if (empty($product)) {
        Flash::error('product not found');

        return redirect(route('products.index'));
    }
    if ($request->hasFile('product_img')) {
        $fileNameWithExt = $request->file('product_img')->getClientOriginalName();
        $filename = pathinfo($fileNameWithExt, PATHINFO_FILENAME);
        $extension = $request->file('product_img')->getClientOriginalExtension();
        $new_product_img = $filename . '_' . time() . '.' . $extension;
        $path = $request->file('product_img')->move('images/products', $new_product_img);
        Storage::delete('products/'.$product->product_img);
        $input['product_img']= $new_product_img;
    }
    $product= $this->productRepository->update($input, $id);

    Flash::success('product updated successfully.');

    return redirect(route('products.index'));
}

用户模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class OrganizationUser extends Pivot
{
  public function role()
  {
      return $this->belongsTo(Role::class);
  }
}

我的控制器

    public function organizations() {
      return $this->belongsToMany(Organization::class)->using(OrganizationUser::class);
    }

当前,我获得了数据透视表中包含的关系,但是没有获得“角色”表中包含的角色的“标签”,我仅获得了“ Organization_user”中包含的用户ID和组织ID桌子。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

尝试加入

$role = 'Your role id here';

$result = DB::table('Organization_user as ou')
    ->join('Organizations as o', 'o.id', '=', 'ou.organization_id')
    ->join('User as u', 'u.id', '=', 'ou.user_id')
    ->select('o.name', 'u.name as username')
    ->where('ou.role_id', $role)
    ->get();

答案 1 :(得分:0)

尝试关注

1)用户与组织有很多关系。

class User extends Model
{

   public function organizations()
    {
        return $this->belongsToMany(Organization::class)->using(OrganizationUser::class);
    }
}

2)您将需要在数据透视模型中添加角色关系。

class OrganizationUser extends \Illuminate\Database\Eloquent\Relations\Pivot
{
    public function role()
    {
        return $this->belongsTo(Role::class);
    }
}

这应该可以解决您的人际关系问题。

现在,您可以使用其organizations和相关角色查询所有用户。