laravel - 获取聊天对话的所有用户
问题描述
我正在尝试创建一个始终有 2 人的聊天系统。一个用户可以有许多不同的对话
我正在用 2 个表格设计它:对话和消息
对话表
public function up()
{
Schema::create('conversations', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('id_me');
$table->unsignedBigInteger('id_you');
$table->foreign('id_me')->references('id')->on('users')->onDelete('cascade');
$table->foreign('id_you')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
}
消息表
public function up()
{
Schema::create('messages', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('conversation_id');
$table->text('msg');
$table->boolean('read')->default(false);
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('conversation_id')->references('id')->on('conversations');
$table->timestamps();
});
}
对话模型
public function messages()
{
return $this->hasMany(Message::class);
}
用户模型
public function conversations()
{
return $this->hasMany(Conversation::class, 'id_me')->orWhere('id_you', $this->id);
}
目前我可以使用关系 $user->conversations 获取对话,但我需要获取每个对话的用户,但我不知道该怎么做。我不知道如何处理它,有什么建议吗?谢谢!
解决方案
我认为你可以做到这一点。
对话模型
public function me()
{
return $this->belongsTo(User::class, 'id_me');
}
public function you()
{
return $this->belongsTo(User::class, 'id_you');
}
然后使用这些$conversation->me , $conversation->you
推荐阅读
- ruby-on-rails - 如何使用 devise gem 停止 Rails 应用程序中的 url 操作?
- apache-spark - SparkSession 连接到 Databricks Azure
- node.js - 节点,快递,猫鼬不一起工作
- azure - 是否可以在 Azure Databricks 中使用 Tensorboard 分析 Tensorflow?
- reproducible-research - 如何创建可执行的研究纲要 (erc)?
- android - Android:使用 SSL 碰撞连接到 Squid 代理不起作用
- powershell - 验证用户是否存在于 Octopus Deploy 中
- c - 为什么 CommandLineToArgvW 以不同的方式处理它的第一个参数?
- python - Pandas 数据框分组和计数与 Python 中的验证
- oracle - Oracle 时间戳和间隔