laravel orm:来自几乎相同查询的不同结果

时间:2017-10-05 12:05:55

标签: php json laravel orm

我对一个非常简单的事情如何运作起了很大的疑问:

如果我打电话:

$companies=User::All();

然后我可以在forach

中使用这样的语句
foreach($companies as $company)
$company['new_field']= 'something';

如果我限制查询的输出,例如:

$companies = DB::table('companies')
            ->select('id','name','email','business_name',...)->get();

事情不像以前那样有效,

  • 我尝试使用或不使用->get()
  • 我尝试转换为->toArray()(错误上升)
  • 我尝试使用put() and push()进行集合方法,然后再次尝试错误......

如何在集合的每个项目中添加一个字段,只是为了将其传递给视图?

2 个答案:

答案 0 :(得分:2)

尝试这样,希望它适合你:

$users=User::select('id','name','email','business_name',...)->get()->toArray();

然后像这样使用foreach循环:

foreach($users as $key => $value ){
    $users[$key]['newField'] = "Demo";
}

答案 1 :(得分:1)

如果您正在使用Laravel和模型,那么有更好的方法来添加自定义属性或字段,这就是我为自定义字段所做的事情

例如:

有一个型号名称用户 所以在用户模型中 添加属性名称如下:

class User extends Model
{
    protected $appends = ['new_field'];

    public function getNewFieldAttribute() // defining field logic here
    {
        return // your code
    }

因此您无需使用foreach和循环并添加新字段

了解更多关于laravel doc的信息:https://laravel.com/docs/5.5/eloquent-mutators#accessors-and-mutators

  

建议

您也可以使用Model限制输出。

User::select('id','name','email','business_name',...)->get();

如果您正在制作像

这样的数组
User::select('id','name','email','business_name',...)->get()->toArray();

所以这也会为您提供自定义字段