Laravel 5查询关系模型

时间:2015-12-12 17:41:09

标签: php laravel laravel-5

我正在尝试在我正在构建的时间表系统中查询我的一个模型关系。我有以下模型设置:

  • 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()

有谁知道我是如何做到的?

1 个答案:

答案 0 :(得分:1)

Timesheets没有那种方法。该方法(关系)存在于用户,而不是时间表。

您可以尝试这样的事情,看看它是否有效。

$timesheets = Timesheet::whereHas('user.employeeTypes', function ($q) {
    $q->where('name', 'something');
})->get();