首页 > 解决方案 > 雄辩的查询根据数据透视表添加新字段

问题描述

我正在尝试使用 Eloquent 进行一些查询,但无法获得我真正想要的结果。使用 Laravel 6。

我有下一张桌子:

表用户:

id  | user
============
1   | Andy

表颜色:

id  | color
============
1   | red
2   | blue
3   | white
4   | green
5   | black

表 user_colors:

id  | user_id   | color_id
==========================
1   | 1         | 1
1   | 1         | 4

我想要的是获得所有颜色的东西,但将枢轴中的颜色标记为活动。像这样的东西:

id  | color | active
====================
1   | red   | 1
2   | blue
3   | white
4   | green | 1
5   | black

任何想法?

标签: laraveleloquent

解决方案


这应该返回Color与给定用户关联的对象集合,并将属性active设置为 true

$user_colors = User::find(1)->colors;
$colors = Colors::all()->transform(function ($color) use ($user_colors) {
    if ($user_colors->contain($color)) {
        $color->active = true;
    }
    return $color;
});

虽然这应该可以达到您需要的结果,但在不知道您想要使用它的上下文的情况下,它可能效率低下。


推荐阅读