Laravel 根据透视表添加新字段的雄辩查询
我试图提出一些有说服力的问题,但无法得到我真正想要的结果。使用Laravel 6 我有下面几张桌子: 表格用户:Laravel 根据透视表添加新字段的雄辩查询,laravel,eloquent,Laravel,Eloquent,我试图提出一些有说服力的问题,但无法得到我真正想要的结果。使用Laravel 6 我有下面几张桌子: 表格用户: id | user ============ 1 | Andy id | color ============ 1 | red 2 | blue 3 | white 4 | green 5 | black id | user_id | color_id ========================== 1 | 1 | 1
id | user
============
1 | Andy
id | color
============
1 | red
2 | blue
3 | white
4 | green
5 | black
id | user_id | color_id
==========================
1 | 1 | 1
1 | 1 | 4
表格颜色:
id | user
============
1 | Andy
id | color
============
1 | red
2 | blue
3 | white
4 | green
5 | black
id | user_id | color_id
==========================
1 | 1 | 1
1 | 1 | 4
表格用户\u颜色:
id | user
============
1 | Andy
id | color
============
1 | red
2 | blue
3 | white
4 | green
5 | black
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
class Color extends Model {
// Your code...
protected $appends = ['active'];
public function getActiveAttribute() {
$is_active = UserColor::whereColorId($this->id)->first();
if (!is_null($is_active)) return true; // Or 1, up to you
return false; // Or 0, up to you
}
}
有什么想法吗?有几种方法可以完成这项任务。其中之一可能是在模型中使用附录 附录是可以动态添加到模型类中的属性 例如,您可以这样编辑您的
颜色型号:
id | color | active
====================
1 | red | 1
2 | blue
3 | white
4 | green | 1
5 | black
class Color extends Model {
// Your code...
protected $appends = ['active'];
public function getActiveAttribute() {
$is_active = UserColor::whereColorId($this->id)->first();
if (!is_null($is_active)) return true; // Or 1, up to you
return false; // Or 0, up to you
}
}
如果使用此方法,则可以访问$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;
});
虽然这应该可以达到您需要的结果,但在不知道您要在其中使用它的上下文的情况下,它可能会效率低下。您希望使用关系或联接查询可以吗?您有这些表的模型吗?如果是这样,请说明您在模型之间建立的关系。那么,您是否想要一个所有颜色的集合,并将单个给定用户选择的颜色标记为活动颜色?或者列出所有颜色以及每个用户的计数?我想是第一个scenario@Hamelraj为了得到一个连接应该是确定的,我只想要一个颜色列表数组。并标记为与轴匹配的活动。这一个听起来很有趣。上下文将显示系统中可用的颜色列表,并将用户已激活并存储在“用户颜色”中的颜色标记为“活动”