【问题标题】:Pagination with many to many relationship in laravellaravel中多对多关系的分页
【发布时间】:2015-04-23 03:07:37
【问题描述】:

我正在尝试在 laravel 4.2 中设置电子邮件系统。我有两个模型电子邮件和用户,它们之间存在多对多关系。到目前为止一切顺利,但现在我在分页发送电子邮件时遇到了一个问题。我已经尝试了 2 天,但还没有完成任务。

    //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 数据透视表数据以获取当前的所有电子邮件 ID 经过身份验证的用户 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 prepage 仅 10 封电子邮件。

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

任何帮助将不胜感激。

谢谢

数据透视表 users_email

【问题讨论】:

  • 你所做的很清楚,但我不明白你想做什么。获取用户发送的所有电子邮件,分页?获取所有用户,分页,以及他们发送的电子邮件急切加载?让所有用户都发送了他们的第一封电子邮件?
  • @Alexendre Butynski 问题是 getTotal 分页数返回 2 在这种情况下我想是 9 因为用户 79 已经发送了 9 封电子邮件。除了分页数字,一切都很好!

标签: mysql email laravel pagination eloquent


【解决方案1】:

你必须写两个不同的关系:

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

请注意,当您在关系名称后面加上方括号时,您可以链接查询构建器方法。

【讨论】:

  • 实际上我在考虑第二个关系,但后来我想可能一次只有一个关系有效......!谢谢
  • 在 Laravel 5.1 中也为我工作!
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 2019-10-02
相关资源
最近更新 更多