我理解这个问题可能不太清楚,但这是我的情况。我正在使用laravel 5,我正在开发一个CRM系统。我已将婚姻状况和性别/性别置于一个查找表中。每当我从数据库中获取值并将其传递给视图时,我有两个单独的查询。
$sexes = DB::table('Lookups')
->where('ValueType', '=', 'Sex')->get();`
$marstatus = DB::table('Lookups')
->where('ValueType', '=', 'Marital Status')->get();`
return view('clients.edit',compact('client'))
->with('sexes', $sexes)
->with('marstatus ', $marstatus );
此代码实际上有效,我能够在我的观点中同时获得婚姻状况和性别/性别。
所以,这是我的问题
是否有办法在一个查询中查询查找表中的所有值,并过滤掉控制器上的值。所以它可能像
$ Lookups = DB :: table('Lookups')
然后过滤$ Lookups变量并根据我的过滤条件将其分配到两个不同的变量($ sexes和$ marstatus)。即($ sexes适用于ValueType ='Sex'......)
答案 0 :(得分:1)
1)是的确如此。只需安装Laravel Debugbar并亲自查看即可。它是强烈推荐的非常方便的工具。
2)是的,你可以做到这一点,laravel为这类需求提供了很好的辅助函数:
$collection = collect(DB::table('Lookups')
->whereIn('ValueType', ['Marital Status', 'Sex'])
->get());
$marstatus = $collection->filter(function($item) {
return $item->ValueType == 'Marital Status';
});
$sexes = $collection->filter(function($item) {
return $item->ValueType == 'Sexes';
});
这样做,它将结果数组转换为Laravel Collection,以便您可以使用过滤器功能。您还可以使用array_filter
函数进行过滤,而无需将结果数组转换为集合。
3)数据库始终是主要瓶颈之一,查询数量越少越好。但是,这不应该是一般规则,尤其是在使用缓存时。例如,在某些情况下,制作连接或子查询以减少查询数量将是致命的错误。
表演是一个很大的主题。我建议您从Laravel Debugbar开始,比较内存使用情况,查询数量等,并研究各种技术,包括缓存和设计模式。直接在控制器内访问表格首先不是一个好主意...
答案 1 :(得分:0)
是的,这意味着。你的Lookups表有多大?
你可能意味着$ lookups = DB :: table('Lookups') - > all();或者也许考虑使用Eloquent模型类,例如$ lookups = Lookup :: all();如果表很小,也许你可能想要缓存结果?例如使用Laravel中的Cache类。
更好的表现就是使用缓存。
答案 2 :(得分:0)
$sexes_marital_status= DB::table('Lookups')->where('ValueType', '=', 'Sex')
->orWhere('ValueType' '=', 'Marital Status' )
->get();
return view('clients.edit',compact('client'))
->with('sexes_marital_status',$sexes_marital_status);
表数据。 您可以一次编写这样的查询:
const audio = React.findDOMNode(this.refs.audio);
const seeker = React.findDOMNode(this.refs.seeker);
const {left, right} = seeker.getBoundingClientRect();
const seekToPerc = (event.clientX - left) / (right - left);
audio.currentTime = this.props.totalRunTime * seekToPerc;
这样您最好一次发送查询。
`