Laravel新手教程:如何通过路由URL参数实现countries表数据过滤
通过URL参数过滤Laravel中countries表的数据
嘿,作为Laravel新手,这个需求其实非常常见,我来一步步带你实现👇
1. 准备模型(如果还没有的话)
首先得有一个对应countries表的Eloquent模型,方便咱们操作数据库。如果还没创建,打开终端运行这条命令:
php artisan make:model Country
生成的模型文件在app/Models/Country.php,默认已经关联了countries表(Laravel会自动按模型名复数匹配表名),不用额外配置。
2. 创建控制器并编写逻辑
接下来需要一个控制器来处理请求和过滤逻辑,运行命令生成控制器:
php artisan make:controller CountryController
打开app/Http/Controllers/CountryController.php,写入以下代码:
namespace App\Http\Controllers; use App\Models\Country; use Illuminate\Http\Request; class CountryController extends Controller { public function index(Request $request) { // 初始化查询构造器,先拿到所有countries的查询入口 $query = Country::query(); // 检查URL中是否带有`name`参数,如果有就添加过滤条件 if ($request->has('name')) { // 精确匹配:只返回name完全等于参数值的条目 $query->where('name', $request->input('name')); // 如果你需要模糊匹配(比如输入"spa"能返回"Spain"),可以替换成下面这行: // $query->where('name', 'like', "%{$request->input('name')}%"); // 或者Laravel 9+可以用更简洁的whereLike: // $query->whereLike('name', $request->input('name')); } // 执行查询,获取过滤后的结果 $countries = $query->get(); // 返回JSON格式的响应(API场景推荐),如果是web页面可以返回视图 return response()->json($countries); } }
3. 定义路由
打开routes/api.php(如果是API接口)或者routes/web.php(如果是页面请求),添加一条路由:
use App\Http\Controllers\CountryController; Route::get('/countries', [CountryController::class, 'index']);
4. 测试效果
现在你可以访问对应的URL来测试了:
- 精确匹配:
http://你的域名/api/countries?name=spain - 模糊匹配(如果用了like语句):
http://你的域名/api/countries?name=spa
额外优化建议
- 参数验证:可以给参数加个简单验证,避免无效输入,在控制器的
index方法开头添加:$request->validate([ 'name' => 'string|nullable', // 允许name参数为空,或者是字符串类型 // 如果你的表还有其他字段比如`code`,可以继续加规则:'code' => 'string|nullable' ]); - 多参数过滤:如果需要同时过滤多个字段(比如
?name=spain&code=es),只需要在查询构造器里多加几个条件:if ($request->has('code')) { $query->where('code', $request->input('code')); }
内容的提问来源于stack exchange,提问作者Aniket
相关产品推荐
相关产品推荐

