0

我网站的用户模型如下所示

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

它让我得到用户详细信息和排名,但不是供应商名称

谁可以帮我这个事

4

1 回答 1

1

为此,您需要使用hasManyThrough关系。Laravel 文档说has many through关系为通过中间关系访问远距离关系提供了便捷的捷径。

例如User模型可能有许多Supplier通过Supplierrank模型。

所以现在你可以在你的用户模型中定义一个函数来使用预先加载来获取所有供应商

//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();

希望对你有效。

于 2015-11-23T07:55:37.460 回答