首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 4关系:消息传递系统

Laravel 4关系:消息传递系统
EN

Stack Overflow用户
提问于 2014-08-21 14:39:22
回答 1查看 973关注 0票数 1

为了构建一个轻量级的消息传递系统,我遵循了用户ehp的建议:

https://stackoverflow.com/a/18717864/1084315

代码语言:javascript
复制
Users: id | username

Messages: id | from | content

user_messages: user_id | message_id



class User extends Eloquent {

  public function messages()
  {
    return $this->belongsToMany('Message');
  }

  public function sent_messages()
  {
    return $this->hasMany('Messages', 'from');
  }

}

class Message extends Eloquent {

  public function from()
  {
    return $this->belongsTo('User', 'from');
  }

public function to()
  {
    return $this->belongsToMany('User');
  }
}

我创建了这样一条信息:

代码语言:javascript
复制
User::find(2)->messages()->create(array('text'=>'this is a message from admin to someone', 'from'=>'1');

现在,我需要查找/获取从特定用户到特定用户的每条消息。但在本例中,只有“from”in直接存储在“messages”表中。

我甚至无法通过以下方式访问任何消息的支点

代码语言:javascript
复制
User::find(1)->sent_messages()->get();

收集一个用户和另一个用户之间消息的最佳实践是什么?

任何帮助都非常感谢

EN

回答 1

Stack Overflow用户

发布于 2014-08-21 15:14:57

首先,我认为有一个小错误:

代码语言:javascript
复制
public function sent_messages() {
  return $this->hasMany('Messages', 'from');
}

这可能应该是:

代码语言:javascript
复制
public function sent_messages() {
  return $this->hasMany('Message', 'from');
}

现在,如果您希望将所有的消息从一个用户发送到另一个用户,那么这个呢?没有经过测试,但是在to关系上设置一个约束应该可以做到这一点。

代码语言:javascript
复制
$messages_from_A_to_B = Message::where('from', $UserA->id)->whereHas('to', function($q) use ($UserB) {
  $q->where('user_id', $UserB->id);
})->get();

另外,我假设您具体要求用户可以向多个用户发送消息?否则,下表结构看起来会更容易一些:

代码语言:javascript
复制
users: id
messages: from | to

然后你只需要:

代码语言:javascript
复制
class User extends Eloquent {

  public function messages() {
    return $this->hasMany('Message', 'to');
  }

  public function sent_messages() {
    return $this->hasMany('Message', 'from');
  }
}

class Message extends Eloquent {

  public function from() {
    return $this->belongsTo('User', 'from');
  }

  public function to() {
    return $this->belongsTo('User', 'to');
  }

}

$messages_from_A_to_B = Message::where('from', $UserA->id)->where('to', $UserB->id)->get();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25429229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档