Как получить детали модели, которая связана с другой моделью, но не связана напрямую с родителем в 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();

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

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

0

Решение

Для этого вам нужно использовать 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();

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]