如何在Laravel中基于外键选择口才

时间:2020-10-05 06:33:58

标签: laravel

在我的Laravel-5.8项目中,我有以下模型:

class HrLeaveType extends Model
{
    protected $table = 'hr_leave_types';
    protected $fillable = [
              'id',
                  'company_id',
                  'leave_type_name',
              ];

    
    public function leavetypedetail()
    {
        return $this->hasMany('App\Models\Hr\HrLeaveTypeDetail');
    }

}

class HrLeaveTypeDetail extends Model
{
    protected $table = 'hr_leave_type_details';
    protected $fillable = [
                  'id',
                  'leave_type_id',
                  'company_id',
                  'employee_type_id',
                  'leave_applicable_gender',
              ];

    public function leavetype()
    {
        return $this->belongsTo('App\Models\Hr\HrLeaveType', 'leave_type_id', 'id');
    }  
    
    public function employeetype()
    {
        return $this->belongsTo('App\Models\Hr\HrEmployeeType', 'employee_type_id', 'id' );
    }        
    
    public function company()
    {
        return $this->belongsTo('App\Models\Organization\OrgCompany','company_id');
    }
}

一个HrLeaveType具有多个LeaveTypeDetail

我的控制器中有这个

    $userCompany                    = Auth::user()->company_id;
    $employeeCode                   = Auth::user()->employee_code;
    $employeeemptypeid              = HrEmployee::where('employee_code', $employeeCode)->where('company_id', $userCompany)->pluck('employee_type_id')->first();
    $employeeegendercode            = HrEmployee::where('employee_code', $employeeCode)->where('company_id', $userCompany)->pluck('gender_code')->first();        
    if($employeeegendercode == 0) 
    {
        $leavetypes                     = HrLeaveType::where('company_id', $userCompany)->get();
    }else{
        $leavetypes                     = HrLeaveType::where('company_id', $userCompany)->get();
    }

性别代码(0 =女性,1 =男性) Leave_applicable_gender(1 =两者,2 =男性,3 =女性)

一个HrLeaveType具有许多LeaveTypeDetail。我想生成一个条件为HrLeaveType的下拉列表。

如果 $ employeeegendercode == 0,然后$ leavetypes = HrLeaveType,其中$ employeeemptypeid = HrEmployeeType中的employee_type_id,leave_applicable_gender为1或3

其他

$ leavetypes = HrLeaveType,其中$ employeeemptypeid = HrEmployeeType中的employee_type_id,而Leave_applicable_gender为1或2

目前,这是我的看法:

            <div class="form-group">
                <label>Leave Type:<span style="color:red;">*</span></label>
                <select id="leave_type" class="form-control select2bs4" data-placeholder="Choose Leave Type" tabindex="1" name="leave_type_id" style="width: 100%;">
                    <option value="">Select Leave Type</option>
                    @if($leavetypes->count() > 0)
                        @foreach($leavetypes as $leavetype)
                            <option value="{{$leavetype->id}}" {{ old('leave_type_id', $leaverequest->leave_type_id) == $leavetype->id ? 'selected' : ''}}>{{$leavetype->leave_type_name}}
                            </option>
                        @endforeach
                    @endif
                </select>
            </div>

但休假类型不是取决于性别

如何在其中完成$ leavetypes

    if($employeeegendercode == 0) 
    {
        $leavetypes                     = HrLeaveType::where('company_id', $userCompany)->get();
where leavetype->leavetypedetail->leave_applicable_gender == 1 or 3
    }else{
        $leavetypes                     = HrLeaveType::where('company_id', $userCompany)->get();
where leavetype->leavetypedetail->leave_applicable_gender == 1 or 2
    }

要实现这一目标?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以在where条件下雄辩地使用whereHas。请阅读更多内容。https://laravel.com/docs/7.x/eloquent-relationships#querying-relationship-existence

希望它对您有帮助