如何解决Laravel Eloquent:一对多的关系,与众不同
需要获得不同的行。
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",],
解决方法
要从雄辩的调用链中的 unique()方法中获得唯一的结果。
Image::with('user')
->orderBy('id','desc')
->paginate(10)
->unique() // Like this
如果上述方法无效,请尝试以下方法。
Image::with('user')
->orderBy('id','desc')
->paginate(10)
->unique()
->values()
,
听起来您想要所有用户,而每个用户只需要一张图像。您可以执行以下操作,将图像关系添加到用户模型:
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
这样访问这些数据;
要获取每个用户的最新图片,您可以使用自加入之类的方法
模式
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.png',1),'3.png',(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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。