【问题标题】:Is there a way to access distant relations in Laravel 7?有没有办法在 Laravel 7 中访问远程关系?
【发布时间】:2020-10-14 21:31:05
【问题描述】:

我有四个表,不知何故,在我的工资表中,我想选择一名员工并填写他/她工资单的详细信息。唯一的问题是我无法获取员工职位详细信息,因为它没有直接连接到 Payrolls 表。

员工模型

class Employees extends Model
{
protected $fillable = [
    'fname',
    'lname',
    'gender',
    'address',
    'positions_id'
];

public function positions()
{
    return $this->belongsTo(Positions::class);
}

public function payrolls()
{
    return $this->belongsToMany(Payrolls::class);
}
}

职位模型

class Positions extends Model
{
protected $fillable = [
    'name',
    'basic_pay'
];

public function employees()
{
    return $this->hasMany(Employees::class);
}
}

薪资模型

class Payrolls extends Model
{
protected $fillable = [
    'days_work',
    'overtime_hrs',
    'late',
    'absences',
    'bonuses',
    'employees_id'
];

public function employees()
{
    return $this->belongsToMany(Employees::class);
}
}

有什么方法可以连接工资单和职位?我想从 Positions 表中获取 basic_pay 并将其显示在 Payrolls 表中(可能通过中间表)。

【问题讨论】:

  • 到目前为止您尝试过什么? Employee模型有一个position_id,那么获取引用的实体有什么问题呢?
  • @NicoHaase 我已经完成了显示单个工资单的操作,但不知何故,我只能在工资单刀片中获得 positions_id,如下所示:{{ $payrolls->employees->pluck('positions_id')->first() }} 我想要的是在show.blade Payroll 所以我可以进行不可能的计算,我只会得到一个错误。

标签: php database laravel eloquent relationship


【解决方案1】:

我想通了。

我使用查询生成器来连接控制器上的三个表(员工、工资单、职位):

public function show(Employees $employee, Payrolls $payroll)
{
    $basic_pay = DB::table('payrolls')
    ->join('employees', 'employees.id', '=', 'payrolls.employees_id')
    ->join('positions', 'positions.id', '=', 'employees.positions_id')
    ->select('positions.basic_pay')
    ->where('payrolls.employees_id', '=', $payroll->employees_id)
    ->get();

    $position_name = DB::table('payrolls')
    ->join('employees', 'employees.id', '=', 'payrolls.employees_id')
    ->join('positions', 'positions.id', '=', 'employees.positions_id')
    ->select('positions.name')
    ->where('payrolls.employees_id', '=', $payroll->employees_id)
    ->get();

    return view('payrolls.show')
    ->with('payrolls', $payroll)
    ->with('basic_pay', $basic_pay)
    ->with('position_name', $position_name)
    ->with('employees', $employee);
}

根据我的观点:

<label><h4>Position: </h4></label>
<span style="font-size: 25px">
   {{ $position_name->pluck('name')->first() }}
</span><br>

<label><h4>Basic Pay: </h4></label>
<span style="font-size: 25px">
   {{ $basic_pay->pluck('basic_pay')->first() }}
</span><br>

我使用 pluck 来提取我想要显示的所需列字段。

【讨论】:

    猜你喜欢
    • 2019-06-02
    • 2021-07-29
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2018-03-08
    相关资源
    最近更新 更多