【问题标题】:Hide attributes from model on query load [duplicate]在查询加载时隐藏模型的属性[重复]
【发布时间】:2020-10-09 20:29:34
【问题描述】:

我正在尝试生成一个查询,该查询返回航班请求列表以及请求它们的用户,但我试图省略用户的 email 属性,我知道我可以将 email 添加到User 模型中的隐藏数组,但我只想从这个查询中隐藏它,因此必须将 makeVisible 方法添加到我在我的应用程序上运行的所有其他查询中是没有意义的。

我得到的查询是这样的:

FlightRequest::get()
->where('public', 1)
->whereNull('acceptee_id')
->sortBy('id')
->load('aircraft', 'requestee');

我尝试将->makeHidden('requestee.email') 添加到查询的末尾,但这不起作用

【问题讨论】:

  • 这是非常糟糕的优化...您的初始查询应该是FlightRequest::with(['aircraft', 'requestee'])->where('public', 1)->whereNull('acceptee_id')->orderBy('id')->get()。当您调用::get() 时,您会将数据库中的每条记录加载到内存中,然后执行一堆额外的过滤/排序/加载,这非常低效。

标签: laravel eloquent


【解决方案1】:

通过手动指定请求者“列”来修复,->load('aircraft', 'requestee:id,username,name')

【讨论】:

  • 为什么不让数据库进行所有过滤和排序,而不是获取所有记录然后过滤它们?你可以使用with 来加载这些关系
猜你喜欢
  • 2011-07-17
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
相关资源
最近更新 更多