在Laravel中进行数据库调用时,如何将多个列分组为一个对象?

时间:2018-11-24 21:32:33

标签: php mysql laravel eloquent

假设我要获取用户

每个用户都有10个与之关联的列

如何在每个用户上将5列分组为一个对象,以便可以更轻松地使用javascript映射它们?

我可以做

foreach ($users as $user)
{
   $user['new_object']['col_1'] = $user->col_1;
   unset($user->col_1);
   $user['new_object']['col_2'] = $user->col_2;
   // etc 
}

但是肯定有一种方法可以将列分组为Laravel上的对象吗?

例如,类似

$users = User::where('verified', 1)
             ->group('new_object', ['col_1', 'col_2', 'col_3']),
             ->get();

或者我可以通过某种方式来更新我的用户模型吗?

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

$users = User::where('verified', 1)->get()->map(function($row)
{
    $row->new_obj = [$row->col1, $row->col2, $row->col3];
    unset($row->col1, $row->col2, $row->col3);
    return $row;
});

答案 1 :(得分:1)

您可以在模型中使用变体:

public function getNewObjAttribute() {
    return [
        $this->col1,
        $this->col2,
        $this->col3,
    ];
}

并在该模型的$appends属性中:

protected $appends = [
    'new_obj',
];