Laravel遵循DRY原则进行搜索。

4 浏览
0 Comments

Laravel遵循DRY原则进行搜索。

我有多个搜索功能,它们都类似于这样:

public function searchEntity(Request $request)
{       
    ... // 一些变量和其他内容 
    $q = $request->q;
    $entities = Entity::where('name', 'LIKE', '%' . $q . '%')->paginate(15);
    $entities->appends(['search' => $q]);
    return view(
        'entity',
        compact('entities', ...)
    );
}

有没有更好的方法可以在搜索Eloquent实体时避免重复相同的代码,或者将这些方法保持分开是否更好?

0
0 Comments

Laravel遵循DRY原则的搜索方法

在Laravel开发中,经常会遇到需要实现搜索功能的情况。然而,很多开发者在实现搜索功能时会出现代码冗余的问题,违反了DRY(Don't Repeat Yourself,不要重复自己)原则。下面将介绍搜索功能出现问题的原因以及解决方法。

问题的原因:

在实现搜索功能时,开发者常常会在多个模型中重复编写相同的搜索逻辑代码,导致代码冗余。

解决方法:

为了遵循DRY原则,建议使用Trait和Scope来实现搜索功能的代码复用。下面是具体的解决方法:

1. 创建一个Trait,命名为search,其中包含一个名为search的scope方法,代码如下:

trait search
{
    public function scopeSearch(Builder $builder)
    {
        $request = request();
        $q = $request->q;
        return $builder->where('name', 'LIKE', '%' . $q . '%')->paginate(15);
    }
}

2. 在需要使用搜索功能的模型中使用该Trait。在模型中使用use关键字引入Trait,代码如下:

use search;

3. 在控制器中,可以通过以下方式来实现搜索功能:

$entities = Entity::search();

通过以上步骤,我们可以将搜索功能的代码封装在Trait中,实现代码的复用。在每个需要搜索的模型中,只需引入该Trait,并调用search方法即可实现搜索功能。这样不仅提高了代码的重用性,也遵循了DRY原则。

补充建议:

为了更好地理解和使用Trait和Scope,可以参考以下链接的相关内容:

- [链接1](https://stackoverflow.com/questions/40288657)

- [链接2](https://medium.com/traits-in-laravel-5db8beffbcc3)

祝你好运!

0