Красноречивый вызов разбивки на страницы Laravel в реляционной базе данных

У меня есть пользователь. Пользователь создает много объявлений. Я хочу видеть сведения о пользователях с объявлениями, в которых объявления отображаются с разбиением на страницы. Для этого я делаю две модели (пользовательская и рекламная).

public function user(){

     return $this->hasOne(User::class, 'id', 'user_id');
}

public function ads(){

    return $this->hasMany(Ads::class, 'user_id', 'id');
}

В контроллере я вызываю так:

$users = Ads::with(['user'=> function ($q) use ($id){
        $q->where('id',$id);
    }])->paginate(2);

Но здесь сведения о пользователе отображаются при вызове цикла forelse. Но я не хочу этого. Итак, как я могу получить информацию о пользователе с разбиением на страницы объявлений?


person omor faruk    schedule 13.04.2019    source источник
comment
Если это одно и то же отношение, почему вы передавали два разных внешних ключа отношениям?   -  person Piazzi    schedule 13.04.2019
comment
извините за ошибку, отредактировал.   -  person omor faruk    schedule 15.04.2019


Ответы (1)


Я думаю, вы слишком усложняете. У вас есть две модели. В User вы можете поместить это отношение:

public function ads(){
    return $this->hasMany(App\Ad, 'user_id', 'id');
}

В модели Ads вы помещаете эту связь:

public function user(){
     return $this->belongsTo(App\User, 'id', 'user_id');
}

В вашем контроллере вы просто вызываете так:

//If you want a list of User's Ads
$user = User::find(1);
$userAds = $user->ads()->paginate(2); //you paginate because can be many

//If you want the details from a user who made the Ad #1
$ad = Ad::find(1);
$user = $ad->user; //Don't need paginate because is only one.
person HerickC    schedule 13.04.2019