我网站的用户模型如下所示
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 documentation says ,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();
希望它对您有用。
关于php - Laravel4.2中如何获取与另一个模型相关但与父模型不直接相关的模型的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33864327/