Пользовательская модель моего сайта выглядит так
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 гласит, 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();
Надеюсь, это работает для вас.
Других решений пока нет …