laravel - 雄辩的查询根据数据透视表添加新字段
问题描述
我正在尝试使用 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
任何想法?
解决方案
这应该返回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;
});
虽然这应该可以达到您需要的结果,但在不知道您想要使用它的上下文的情况下,它可能效率低下。
推荐阅读
- c++ - 这段代码是什么意思 printf("Minimum Signed Char %d\n",-(char)((unsigned char) ~0 >> 1) - 1);
- javascript - Node.js localhost:3000 拒绝连接
- php - Laravel Blade 上的旧值()似乎不起作用
- python - 无法用相应列中最后三行的平均值替换数据帧最后一行中的零,同时保留非零值
- angular - 处理角度服务中的错误
- flutter - Flutter FAILURE:构建失败,未设置异常密钥库文件
- apache-kafka - 使用 Apple M1 启动 Confluent Control Center 时出错
- javascript - 使用 html2pdf.js 的 PDF 中的空白页
- python - 函数定义中的常量无法识别
- python - 按日期升序排列的日期栏频率条形图