【发布时间】:2020-08-17 15:48:25
【问题描述】:
我的要求?
如果我是 Id = 1 的登录用户,那么通过 Messages 表我想从 Users 表中选择我向其发送消息或来自的用户我收到消息的人。
表 1:用户
+----+------+-------+
| id | name | email |
+----+------+-------+
| 1 | a | ??? |
| 2 | b | ??? |
| 3 | c | ??? |
| 4 | d | ??? |
| 5 | e | ??? |
| 6 | f | ??? |
| 7 | g | ??? |
| 8 | h | ??? |
| 9 | i | ??? |
| 10 | j | ??? |
+----+------+-------+
表 2:消息
+----+---------+-------------+
| id | user_id | receiver_id |
+----+---------+-------------+
| 1 | 1 | 2 |
| 2 | 3 | 1 |
| 3 | 4 | 1 |
| 4 | 1 | 5 |
| 5 | 1 | 3 |
+----+---------+-------------+
用户模型
public function messages()
{
return $this->belongsToMany(User::class, 'messages', 'user_id', 'receiver_id');
}
消息模型
public function user()
{
return $this->belongsTo(User::class);
}
那么到目前为止我尝试了什么?
$id = Auth::id();
$users = User::with(['messages' => function($query) use($id){
$query->where('user_id', $id)
->orWhere('received_id', $id)
->orderBy('created_at', 'DESC');
}])->get();
dd($users);
预期的结果是什么?
使用这个查询,我得到了我所有的 10 个用户。虽然我应该只获得 4 个用户(ID 为 2、3、4、5 的用户)。
如果上述查询有误,或者我应该采用另一种方法,或者我应该建立某种关系,请帮忙。
希望你已经理解了这个问题,我是 Laravel 的新手,但我正在学习。
【问题讨论】:
-
在
User模型上,messages()belongsToMany 和Message模型,所以在该行将User::class更改为Message::class -
@sta,不,它正在抛出
Syntax error or access violation: 1066 Not unique table/alias
标签: mysql laravel eloquent laravel-7