我试图用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
有什么主意吗?
答案 0 :(得分:1)
这应该返回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;
});
这虽然可以达到所需的结果,却不知道要使用它的上下文,但是效率可能很低。
答案 1 :(得分:0)
有几种方法可以完成此任务。其中之一可能是在模型中使用追加。
追加是可以动态添加到模型类中的属性。
例如您可以像这样编辑Color
模型:
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
属性。
请注意,这只是可用于执行此任务的不同方法之一。