需要获得不同的行。
laravel是否有雄辩的方法来避免重复数据。 加入图片表格后需要获得唯一身份的用户。
现在,我有相同的用户,需要避免重复相同的用户。
模型图片
public function user()
{
return $this->belongsTo('App\User');
}
用户表
id | name
---------
| 1| Joe
| 2| Ben
| 3| Don
图像表
id | name | user_id
---------------------
| 1 | 1.png | 3
| 2 | 2.png | 1
| 3 | 3.png | 1
| 4 | 4.png | 2
使用雄辩的方式加入:
Image::with('user')->orderBy('id', 'desc')->paginate(10);
必需的输出
"data": [
{
"id": 4,
"name": "4.png",
"user_id": 2,
"user": {
"id": 2,
"name": "Ben",
}
},
{
"id": 3,
"name": "3.png",
"user_id": 1,
"user": {
"id": 1,
"name": "Joe",
}
},
{
"id": 1,
"name": "1.png",
"user_id": 3,
"user": {
"id": 3,
"name": "Don",
}
},
],
答案 0 :(得分:0)
要从雄辩的调用链中的 unique()方法中获得唯一的结果。
Image::with('user')
->orderBy('id', 'desc')
->paginate(10)
->unique() // Like this
如果上述方法无效,请尝试以下方法。
Image::with('user')
->orderBy('id', 'desc')
->paginate(10)
->unique()
->values()
答案 1 :(得分:0)
听起来您想要所有用户,而每个用户只需要一张图像。您可以执行以下操作,将图像关系添加到用户模型:
message.LastReadAt = &now // field LastReadAt *time.Time`example:"2020-05-01T15:00:00Z"` of Message type
然后,您将像Cannot use '&now' (type *string) as type *time.Time
这样访问这些数据;
答案 2 :(得分:0)
要获取每个用户的最新图片,您可以使用自加入之类的方法
模式
CREATE TABLE users
(`id` int, `name` varchar(3))
;
INSERT INTO users
(`id`, `name`)
VALUES
(1, 'Joe'),
(2, 'Ben'),
(3, 'Don')
;
CREATE TABLE images
(`id` int, `name` varchar(5), `user_id` int)
;
INSERT INTO images
(`id`, `name`, `user_id`)
VALUES
(1, '1.png', 3),
(2, '2.png', 1),
(3, '3.png', 1),
(4, '4.png', 2)
;
查询
select a.*, u.*
from images a
left join images b on a.user_id = b.user_id
and a.id < b.id
join users u on u.id = a.user_id
where b.user_id is null
order by a.id desc
查询生成器
DB::table('images as a')
->select('a.*, u.*')
->leftJoin('images as b', function ($join) {
$join->on('a.user_id', '=', 'b.user_id')
->whereRaw(DB::raw('a.id < b.id'));
})
->join('users as u', 'u.id', '=', 'a.user_id' )
->whereNull('b.user_id')
->orderBy('a.id', 'desc')
->get();