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て多くのモデルがある場合があります。SupplierSupplierrank

これで、ユーザー モデルで関数を定義して、熱心な読み込みを使用してすべてのサプライヤーを取得できるようになりました。

//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 に答える