使用Eloquent来建立这种关系

时间:2016-01-09 06:42:13

标签: database laravel eloquent

这就是我的表关系: enter image description here

一个用户可能有多个组。一个组可能有多个用户。 一条消息可能只有一个用户和组。

我在laravel中有三个模型。 用户,消息和组。我的数据透视表是mssg_group,它存储哪个用户向哪个组发送了哪个消息。 (如果这个设计不正确,请告诉我更好的方法)。

如何通过提供groupID来编写关系以在特定时间之前访问所有邮件?

1 个答案:

答案 0 :(得分:1)

我认为您正在搜索hasManyThrough关系。

您需要一个与消息关系的Group模型。有关详细信息,请参阅Laravel Docs

/** 
* app/Group.php
*/

public function messages(){
    return $this->hasManyThrough('App\Message','App\MessageGroup');
}

在消息组模型中,您需要创建消息关系。

/*
* app/MessageGroup.php
*/
protected $table = "mssg_grp";

public function messages(){
    return $this->hasMany('App\Message','id','mssg_id');
} 

在Message模型中,请务必定义自定义表名。

/*
* app/Message.php
*/
class Message extends Model {
    protected $table = 'mssg';
}

在您的控制器中,您可以急切地加载日期要求。

$group_messages = Group::where('id', $group_id)->with(function($query)
  {
    return $query->where('created_at','>',$date);
  })->get()

我还没有测试过,所以这可能需要稍微调整一下,但它应该让你接近你想要的位置。我还没有找到检索用户的地址,但它应该与让同步的消息几乎相同。如果这有帮助,请告诉我。