laravel - Laravel 搜索遵循 DRY 原则
问题描述
我有多个搜索功能,看起来都像这样:
public function searchEntity(Request $request)
{
... // Some variables and other stuff
$q = $request->q;
$entities = Entity::where('name', 'LIKE', '%' . $q . '%')->paginate(15);
$entities->appends(['search' => $q]);
return view(
'entity',
compact('entities', ...)
);
}
有没有更好的方法来做到这一点,每次我尝试搜索 Eloquent 实体时不重复相同的代码,或者将这些方法分开是否更好?
解决方案
我的建议是创建具有范围的特征。
所以你的特质中会有这样的东西:
trait search
{
public function scopeSearch(Builder $builder)
{
$request = request();
$q = $request->q;
return $builder->where('name', 'LIKE', '%' . $q . '%')->paginate(15);
}
}
比在模型中使用您的特征。在每个模型的控制器中,您可以这样做:
$entities = Entity::search();
只需阅读有关 Traits 和 Scopes 的内容,我认为这就是您所需要的。
祝你好运!
推荐阅读
- gitlab-ci - 如何删除/取消注册 GitLab 跑步者
- c++ - 朋友功能无法访问类的私有数据
- kotlin - 未实现的抽象乐趣调用()
- if-statement - Stacked IFs Google Sheets Apps 脚本
- c# - CheckBoxes 通过检查着色(Windows 窗体)
- swift - 如何一个接一个地制作listview?- 斯威夫特
- reactjs - 从另一个组件渲染一个组件,而不是子组件
- database - 找不到 com.udacity.capstoneproject.database.CountryDatabase 的实现。CountryDatabase_Impl 不存在
- forms - 为什么点击提交时 Flutter 表单会重置所有字段?
- reactjs - 在 React TS 中管理无限滚动性能