我正在尝试在我正在构建的时间表系统中查询我的一个模型关系。我有以下模型设置:
User
可以有多个时间表,可以属于多种员工类型Timesheet
可以包含多行模型设置如下:
用户模型:
<?php namespace App\Models\User;
....
class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
/**
* The employee types that belong to the user.
*
* @return Object
*/
public function employeeTypes()
{
return $this->belongsToMany('App\Models\User\EmployeeType')->withTimestamps();
}
时间表型号:
<?php namespace App\Models\Timesheet;
....
class Timesheet extends Model
{
/**
* The user that owns the timesheet.
*
* @return Object
*/
public function user()
{
return $this->belongsTo('App\Models\User\User');
}
我的问题是,如何查询用户关系并按employee_type
获取时间表。这意味着我需要访问timesheet
表,然后获取与时间表关联的用户,然后按照我指定的员工类型获取用户。
我试过以下......
$timesheets->with('user')->whereHas('employeeTypes', function ($query) use ($request) {
$query->where('name', 'my_employee_type');
});
...但它会出错...
错误:
调用未定义的方法Illuminate \ Database \ Query \ Builder :: employeeTypes()
有谁知道我是如何做到的?
答案 0 :(得分:1)
Timesheets没有那种方法。该方法(关系)存在于用户,而不是时间表。
您可以尝试这样的事情,看看它是否有效。
$timesheets = Timesheet::whereHas('user.employeeTypes', function ($q) {
$q->where('name', 'something');
})->get();