Как получить детали модели, которая связана с другой моделью, но не имеет прямого отношения к родителю в Laravel4.2

Пользовательская модель моего сайта выглядит так

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

Это дает мне подробности пользователя и там рейтинги, но не имена поставщиков

Может ли кто-нибудь помочь мне в этом

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

Надеюсь, это работает для вас.

Другие вопросы по тегам