laravel orm:来自几乎相同查询的不同结果
Posted
技术标签:
【中文标题】laravel orm:来自几乎相同查询的不同结果【英文标题】:laravel orm: different result from almost same query 【发布时间】:2017-10-05 12:05:55 【问题描述】:我非常怀疑 laravel 是如何用于一个非常简单的事情的:
如果我打电话:
$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()
收集方法并再次出现错误...
如何在集合的每个项目中添加一个字段以将其传递给视图?
【问题讨论】:
我不会想到用户模式使用公司表,除非它已被更改.. 如果是这样,它不应该被称为用户 是的,模型是定制的!一切都很好! 确实想在其中使用自定义属性 【参考方案1】:试试这个,希望对你有用:
$users=User::select('id','name','email','business_name',...)->get()->toArray();
然后像这样使用 foreach 循环:
foreach($users as $key => $value )
$users[$key]['newField'] = "Demo";
【讨论】:
$key => $value 的作用是什么? 如果我使用 select as u describe 而没有 toArray 部分,我可以通过访问 $company['new_fiel']=something 来添加一个像之前一样的字段! @JahStation 您可以删除$key => $value
部分。这是我使用的一般做法。【参考方案2】:
如果你在使用 Laravel 和模型,那么有一个更好的方法来添加自定义属性或字段,这就是我为自定义字段所做的
例如:
有一个型号名称用户 所以在用户模型中 添加属性名称,如:
class User extends Model
protected $appends = ['new_field'];
public function getNewFieldAttribute() // defining field logic here
return // your code
因此您无需使用 foreach 和循环并添加新字段
更多请查看 laravel 文档: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();
所以这也会给你你的自定义字段
【讨论】:
感谢我看到了这种方法,但我需要更多的快速方法来传递一个对象,将事物封装在一个集合中,并且该字段依赖于另一个查询...以上是关于laravel orm:来自几乎相同查询的不同结果的主要内容,如果未能解决你的问题,请参考以下文章
Laravel QueryBuilder - 相同查询的 `where()` 和 `whereRaw()` 结果不同
来自 SQL 的 Laravel Eloquent ORM 聚合函数
Laravel Eloquent ORM - 获取第一和第三表数据