php - Laravel 关联关系
问题描述
我对使用它 Laravel 关系感到困惑。我正在创建 Messenger。我使用以下数据库架构。如果两个用户聊天,messages_members 表将包含两个相同的行——只有用户列会不同。如果我需要一个“对话”方法来获取用户曾经与之聊天的所有用户,我应该如何编写用户模型?我不能写一个 Laravel 的关系,我会忽略与所有者正在查看对话的那个 ID 的行。我假设要在关系消息 -> messages_members 中获取消息,只需编写:
class MessagesMembers extends Model {
public function messages(int $limit): BelongsTo
{
return $this->belongsTo(Message::class, 'conversation_id')
->orderBy('created_at', 'DESC')
->limit($limit);
}
}
解决方案
谢谢大家 - 我用子查询解决它:
public function conversations(int $limit = null): object
{
$table = (new MessagesMembers)->getTable();
return $this->hasMany(MessagesMembers::class, 'user', 'id')
->addSelect(['user' => function ($query) use ($table) {
$query->addSelect('user')
->from($table . ' AS sub')
->where('user', '!=', $this->getAttribute('id'))
->whereRaw('`sub`.`conversation_id` = `' . $table . '`.`conversation_id`');
}])
->orderBy('created_at', 'DESC')
->limit($limit)
->get();
}
推荐阅读
- spring - 如何在 itemProcessor 中接收 application.properties 值
- java - JAVA_HOME 不适用于 sudo mvn
- keras - 构建多类语义分割的u-net模型
- python - Django:视图调用另一个模板(分页)
- python - 计算每个集群的时间序列数据的季节性和趋势
- php - Laravel 5.6 在路由问题中获取用户
- maps - 哪些 geopandas 数据集(地图)可用?
- api - 收敛 API 错误代码 4000
- oracle - BI-Publisher 11g - 使用不同的数据源创建报告
- sql - 在 SSRS 中使用日期选择器中的值