【问题标题】:How to Select Eloquent based on foreign key in Laravel如何在 Laravel 中根据外键选择 Eloquent
【发布时间】:2020-10-05 06:33:58
【问题描述】:

在我的 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();
    }

gender_code(0=女性,1=男性) leave_applicable_gender(1=两者,2=男性,3=女性)

一个 HrLeaveType 有多个 LeaveTypeDetail。我想根据条件生成一个带有 HrLeaveType 的下拉列表。

如果 $employeeegendercode == 0 然后 $leavetypes = HrLeaveType 其中 $employeeemptypeid = employee_type_id in HrEmployeeType and leave_applicable_gender 是 1 或 3

其他

$leavetypes = HrLeaveType 其中 $employeeemptypeid = employee_type_id in HrEmployeeType and 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 in

    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
    }

要达到这个目的?

谢谢。

【问题讨论】:

    标签: laravel


    【解决方案1】:

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

    希望对你有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2016-11-05
      相关资源
      最近更新 更多