我设置了以下关系模型:
- 用户
- 用户可以有许多职务
-
用户可以有许多员工类型
<?php namespace App'Models'User; use Illuminate'Auth'Authenticatable; use Illuminate'Database'Eloquent'Model; use Illuminate'Auth'Passwords'CanResetPassword; use Illuminate'Contracts'Auth'Authenticatable as AuthenticatableContract; use Illuminate'Contracts'Auth'CanResetPassword as CanResetPasswordContract; class User extends Model implements AuthenticatableContract, CanResetPasswordContract { use Authenticatable, CanResetPassword; /** * The database table used by the model. * * @var string */ protected $table = 'user'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['first_name', 'last_name', 'email', 'status', 'activation_code']; /** * The attributes excluded from the model's JSON form. * * @var array */ protected $hidden = ['password', 'remember_token', 'activation_code']; /** * The roles that belong to the user. * * @return Object */ public function roles() { return $this->belongsToMany('App'Models'User'Role')->withTimestamps(); } /** * The employee types that belong to the user. * * @return Object */ public function employeeTypes() { return $this->belongsToMany('App'Models'User'EmployeeType')->withTimestamps(); } /** * The job itles that belong to the user. * * @return Object */ public function jobTitles() { return $this->belongsToMany('App'Models'User'JobTitle')->withTimestamps(); } }
现在,我希望能够选择一个用户列表,以及他们所有的职位和员工类型。
我尝试过这样的事情,但没有这样的运气!请有人告诉我这是怎么可能的?
$this->user->whereIn('id', $ids)->jobTitles()->get();
上面的代码给出了错误:
调用未定义的方法Illuminate''Database''Query''Builder::jobTitles()
使用热切加载:
$this->user->whereIn('id', $ids)->with('jobTitles', 'employeeTypes')->get();
您只能直接从模型中调用关系,这就是尝试失败的原因(whereIn()
返回Builder
)。
热切/嵌套加载是在循环通过多个模型及其关系之前获取数据的非常有效的方法(否则可能会有很多数据库查询);)