如何在Laravel 5.2

时间:2016-06-28 10:22:52

标签: php orm laravel-5 eloquent laravel-5.2

我在数据库中有三个表如下(不是所有列都是为了清晰度而最小化):

admins (id, community_id, email, password, level)
community (community_id, community_name)
community_results (community_result_id, community_session_id)
community_sessions (community_session_id, community_id)

我已经设置了相关的模型,并且在我的管理控制器中,我有以下代码,它只是将数据库中的所有结果写入laravel集合(这样可以正常工作)。 admin表包含两种类型的管理员用户 - 一种是可以访问数据库中每一行的“超级用户”,另一种是“社区管理员”,只能访问其社区结果(由admins表中的level列。)

当以“社区管理员”身份登录管理员时,我希望仅为其社区获取结果(admins.community_id是此实例中将该管理员与社区相关联的外键)。

例如,John Doe是'ACME社区'的'社区管理员',属于community_id 5,登录后,他只会获得与该特定社区相关的所有“社区会话”的“社区结果” (community_id是community_sessions表中的外键)。

所以我需要找到一种方法来在CommunitySession.php模型中创建结果()关系的修改版本,而不是查询每行只检索一个或多个community_session_id的那些 - 或者是否有使用Community.php模型创建一个关系,基本上使用如下的关系拉入结果...

$community = Community::find(5);
$community->results; // pull results for this community using a relation

有人能建议最好的方法吗?提前致谢

class AdminResultController extends Controller
{
   public function index()
   {
      // if logged in as the 'superuser' admin get ALL results
      if (Auth::guard('admin')->user()->level == 1) 
      {
         $results = CommunityResult::all();
      } else {
        // logged in as 'standard' admin get only their community results
        $results = new CommunityResult;
        // how do I get collection of results for this community only
      }
   }
}

// CommunityResult.php(model)

class CommunityResult extends Model
{
  public $primaryKey = 'community_result_id';

  public function session()
  {
    return $this->hasOne('App\CommunitySession', 'community_session_id', 'community_session_id');
  }
}

// CommunitySession.php(模型)

class CommunitySession extends Model
{
  public $primaryKey = 'community_session_id';

  public function community()
  {
    return $this->belongsTo('App\Community', 'community_id');
  }

  public function results()
  {
    return $this->hasMany('App\CommunityResult', 'community_session_id');
  }  
}

// Community.php(model)

class Community extends Model
{
  public $table = 'community';
  public $primaryKey = 'community_id';

  public function sessions()
  {
    return $this->hasMany('App\CommunitySession', 'community_id');
  }
}

1 个答案:

答案 0 :(得分:0)

Auth::guard('admin')->user()->with('sessions.results')