请问三个表的查询如何写

数据表

表1:users

id | name | sex |
---|------|-----|
1  | aaa  | 0   | 
2  | bbb  | 0   | 
3  | ccc  | 0   | 

表2:topics

id | user_id |  title |
---|---------|--------|
1  | 2       | title1 |
2  | 2       | title2 |
3  | 3       | title3 |

表3:likes

id | user_id | topic_id |
---|---------|----------|
1  | 2       | 2        |
2  | 2       | 3        |
3  | 3       | 3        |

关联关系

User

    public function topics()
    {
        return $this->hasMany(Topic::class);
    }

    public function likes()
    {
        return $this->hasMany(Like::class);
    }

Topic

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function likes()
    {
        return $this->hasMany(Like::class);
    }

Like

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function topic()
    {
        return $this->belongsTo(Topic::class);
    }

现在我用下面的方式查询
Collection::with(['topic'])
就会得到一个很不方便的结果:

data:
--0:
----id:
----topic:
--------id:
--------title:
--1:
----id:
----topic:
--------id:
--------title:

要怎么做才能把topic的内容往上提一级呢?也就是说不要输出collctions的东西,比如:

data:
--0:
----id:
----title:
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9
$user = $request->user(); // 用户模型
Topic::whereHas('likes', function ($query) use ($user) {
   $query->where('user_id', $user->id);
})
1年前 评论
wongvio (楼主) 1年前
看上隔壁小花了啦 (作者) 1年前
wongvio (楼主) 1年前
看上隔壁小花了啦 (作者) 1年前
$user = $request->user();

$collections = Topic::whereHas('collections', function ($query) use ($user) {
   $query->where('user_id', $user->id);
})

        return TopicResource::collection($collections);
1年前 评论
看上隔壁小花了啦 1年前

不用关联自己拼,方便多了

$topicIds = Like::query()->where('user_id',$user_id)->pluck('topic_id')->toArray();
$topics = Topic::query()->whereIn('id',$topicIds)->get();
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!