我的网站的用户模型看起来像这个
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
protected $table = 'users';
protected $hidden = array('password', 'remember_token');
public function answer(){
return $this->hasMany('Answer','user_id');
}
public function supplierranking(){
return $this->hasMany('Supplierrank','userid','id');
}
}
现在,每个用户将在排名模型中对一家公司进行排名,该模型看起来像
Class Supplierrank extends Eloquent{
public function supplier(){
return $this->belongsTo('Supplier','supplierid','id');
}
public function user(){
return $this->belongsTo('User','userid','id');
}
}
我可以向用户提供排名详细信息,但我也必须从供应商表中获得已排名的公司的详细信息
看起来像这个
Class Supplier extends Eloquent{
public function supplierranks(){
return $this->hasMany('Supplierrank','supplierid');
}
}
我所做的查询看起来像这个
$usersandranking = User::where('event','=',$exceleve)->with('supplierranking')->orderBy('id')->get();
它为我提供了用户详细信息和排名,但没有供应商名称
有人能在这个上帮我吗
为此,您需要使用hasManyThrough
关系。Laravel文档说,has many through
关系为通过中间关系访问远程关系提供了一条方便的捷径。
例如,User
模型可能通过Supplierrank
模型具有许多Supplier
。
所以现在你可以在你的用户模型中定义一个函数,让所有供应商都使用热切加载
//In your user model define this function
public function suppliers() {
return $this->hasManyThrough('Supplier', 'Supplierrank', 'userid', 'supplierid');
}
你的查询现在看起来像
$usersandranking = User::where('event','=',$exceleve)->with('supplierranking')->with('suppliers')->orderBy('id')->get();
希望它对你有用。