Php 如何形成一个查询,使查询结果只包含来自laravel中两个单独表的公共值?
我们试图在reports to结构中返回结果,其中只显示共享公共值(来自两个单独的数据表)的报告用户 我们正在使用larvel。在控制器中,我们将“报告用户”定义为(来自公共用户表的)用户,他们是活动的,向另一个“用户id”报告,这两个“用户id”共享完全相同的“记分卡类型id”(来自($dbPrefix.'access\u permissions'和$dbPrefix.'scored\u In')。我们已尝试使用内部联接,但出现了错误。这是一个linux服务器,运行MySQL和PHP,在一个高级堆栈下 表中计分卡的图像(使用的列id为:“用户id”和“计分卡类型id”): 访问权限表的图像(使用的列id为:“id”和“分数卡类型id”): 对于Users表:我们引用的Id是“Id” 此场景中使用了三个数据表,一个公共用户表,一个用于计分的前缀数据库表(此表定义了计分卡类型\ id用户的计分),以及一个用于访问权限的前缀数据库表(此表定义了用户可以对其他用户计分的计分卡类型\ id) 我们目前的处境: 你可以在这里看到,老师1可以看到学生2和学生3,但他们不应该在老师2或老师3的课堂上看到学生2和学生3,因为老师1不教学生2或学生3。 我们想要的是: 我们希望用户(教师1)只看到向教师1报到的学生,并且在教师1拥有的访问权限得分卡类型id中得分Php 如何形成一个查询,使查询结果只包含来自laravel中两个单独表的公共值?,php,mysql,laravel,inner-join,Php,Mysql,Laravel,Inner Join,我们试图在reports to结构中返回结果,其中只显示共享公共值(来自两个单独的数据表)的报告用户 我们正在使用larvel。在控制器中,我们将“报告用户”定义为(来自公共用户表的)用户,他们是活动的,向另一个“用户id”报告,这两个“用户id”共享完全相同的“记分卡类型id”(来自($dbPrefix.'access\u permissions'和$dbPrefix.'scored\u In')。我们已尝试使用内部联接,但出现了错误。这是一个linux服务器,运行MySQL和PHP,在一个高
我们希望结果是,查看用户只能看到其“scored_in”数据表中的“scored_type_id”的报告用户=访问权限数据表中的查看用户“scored_type_id”。这很难理解,此代码存在一些问题 首先,您应该使用雄辩的关系()而不是连接 其次,除非有一个报告链,比如
a报告给b,c报告给b,因此c报告给a
,否则您不需要this->getAllReportingUsers()…
行,因为它会创建不必要的递归。我也不确定您为什么通过引用传递而不返回输出,但我将这留给您
第三,尝试将此作为查询(您可以在不修复上述问题的情况下执行此操作):
它的作用是:
$userId报告的用户
$userId
无权访问记分卡的用户希望我正确理解了您的意思…如果是我,我会将应用程序代码放在一边一分钟,然后查看
function getAllReportingUsers($userId, &$allUsers) {
$dbPrefix = $this->getDBPrefix(null);
$user_profiles = user_profile::join('users', 'users.id', '=', 'user_profile.user_id')
->where('users.is_active', '=', 1)
->where('user_profile.reports_to', '=', $userId)
// Shit!
//->select(DB::raw('distinct('.$dbPrefix.'scored_in.score_card_type_id)'))
//->where($dbPrefix.'scored_in.score_card_type_id', '=', $dbPrefix.'access_permission.score_card_type_id')
->get();
foreach ($user_profiles as $reportUserId){
$userReportTo_id = $reportUserId->user_id;
if($userReportTo_id == $userId)
{
array_push($allUsers, $userReportTo_id);
return false;
}
if($userReportTo_id>0){
array_push($allUsers, $userReportTo_id);
$this->getAllReportingUsers($userReportTo_id, $allUsers);
}else{
return false;
}
$user_profiles = user_profile::join('users','users.id','=','user_profile.user_id')
->join('scored_in','scored_in.userId','=','users.id')
->join('access_permissions','access_permissions.score_card_type_id','=','scored_in.score_card_type_id')
->where('users.is_active', '=', 1)
->where('user_profile.reports_to', '=', $userId)
->where('access_permissions.id', '=', $userId)
->get()