2015-02-21 3 views
0

Я пытаюсь настроить систему электронной почты в laravel 4.2. У меня есть две модели электронной почты и пользователя со многими и многими отношениями между ними. До сих пор так хорошо, но теперь я просто застрял в проблеме, в то время как paginating отправил электронные письма. Я пробовал в течение 2 дней, но еще не выполнил задачу.Разбиение страницы с множеством отношений в laravel

//User.php Model 
    public function emails() 
    { 
     return $this->belongsToMany('Email', 'users_email', 'reciever_uid','email_id')-> 
     withPivot('sender_UID'); 
    } 

    //Email.php Model 
    public function users() 
    { 
     return $this->belongsToMany('User', 'users_email', 'email_id','reciever_id'); 
    } 

Я попытался извлечь данные users_email сводной таблицы, чтобы получить все идентификаторы электронной почты текущего с проверкой подлинности пользователя QueryBuilder.

$user=Auth::Id(); 
    $user_data=DB::table('users_email')-> 
    join('users','users_email.reciever_uid','=','users.Id')-> 
    where('users_email.sender_uid','=',$user->Id)->orderby 
    ('users_email.email_id','desc')->get(); 

    foreach ($user_data as $data) { 
    $id[]=$data->email_id; 
    } 

Теперь у меня есть $ массив ID, и я хочу получать все письма вместе с f_name и l_name приемника, который будет отображаться. До сих пор я старался загружать некоторые базовые знания, но не смог получить ожидаемый результат . Я пробовал что-то это, чтобы разбивать все электронные письма в пределах $ id, но getTotal возвращает только 2, хотя изображение, показанное ниже, указывает, что электронное письмо с id = 78 отправило 8 n, поэтому я хочу разбивать страницы по электронной почте. E.x preage только 10 писем.

$pagination=User::with(array('emails'=>function($query) use ($id){ 
     $query->WhereIn('users_email.email_id',$id); 
    }))->paginate(10); 

Любая помощь будет высоко оценена.

Спасибо

сводной таблицы users_email

enter image description here

+0

Что вы сделали, это довольно ясно, но я не понимаю, что вы хотите делать. Получить все электронные письма, отправленные пользователем, с разбивкой на страницы? Получить всех пользователей, с разбивкой на страницы и отправлять их электронные письма с нетерпением? Получите всех пользователей, отправив их первые электронные письма? –

+0

@Alexendre Butynski Проблема заключается в том, что числовое число getTotal возвращает 2, которое в этом случае я хочу быть 9, потому что пользователь 79 отправил 9 электронных писем. все работает отлично, за исключением номеров разбиения на страницы! – asim

ответ

3

Вы должны написать два разных отношения:

//User.php 
public function emailsReceived() 
{ 
    return $this->belongsToMany('Email', 'users_email', 'reciever_uid','email_id')->withPivot('sender_uid'); 
} 
public function emailsSent() 
{ 
    return $this->belongsToMany('Email', 'users_email', 'sender_uid','email_id')->withPivot('reciever_uid'); 
} 

И тогда вы сможете просто получить все письма, отправленные :

$user = Auth::user(); 
$emailsSentByUser = $user->emailsSent; 
$paginatedEmailsSentByUser = $user->emailsSent()->paginate(10); 

Обратите внимание, что когда вы даете скобки после имени отношения, вы можете связать методы построения запросов.

+0

На самом деле я думал о вторых отношениях, но потом я думал, что может быть только одно отношение работает одновременно ...! благодаря – asim