MySQL Laravel-5 ‘LIKE’ equivalent (Eloquent)
当我们在Laravel中使用Eloquent时,有时候需要用到LIKE
语法,它可以使用SQL语句搜索一些模糊匹配的数据。针对这种情况,我们可以使用如下方法:
$users = User::where('name', 'like', '%'. $search_query .'%')->get();
在上述代码中,我们将$search_query
放在%
中,这样搜索时就会匹配到所有包含$search_query
的字符串。如果要更精确地搜索,在$search_query
前后添加百分号就行了。
下面更详细地介绍一下如何使用LIKE
语法的Eloquent。
阅读更多:MySQL 教程
建立搜索表单
通常,我们都是通过一个表单来获取搜索条件。搜索表单可能包含多个不同的搜索条件,比如用户的名字,邮箱和性别等等。在Laravel的视图中,我们可以像下面这样建立一个搜索表单。
<form action="{{ route('search') }}" method="get">
<input type="text" name="name" placeholder="Name">
<input type="email" name="email" placeholder="Email">
<select name="gender">
<option value="">Select Gender</option>
<option value="male">Male</option>
<option value="female">Female</option>
</select>
<button type="submit">Search</button>
</form>
在上面的搜索表单中,我们使用method="get"
将提交方式设置为GET方法,这样搜索条件就会以查询字符串的形式出现在URL中。然后我们可以在路由中定义一个相应的路由,来捕捉这些查询字符串。
例如,我们可以在web.php
中定义如下路由。
Route::get('/search', 'SearchController@index')->name('search');
在上面的路由中,我们定义了一个名为search
的路由,当使用GET方法访问该路由时,请求会被转发到SearchController
控制器的index
方法中。
在SearchController
中我们可以像下面这样处理查询字符串。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class SearchController extends Controller
{
public function index(Request request)
{query = User::query();
if (request->has('name')) {query->where('name', 'like', '%'.request->input('name').'%');
}
if (request->has('email')) {
query->where('email', 'like', '%'.request->input('email').'%');
}
if (request->has('gender')) {query->where('gender', request->input('gender'));
}users = $query->get();
return view('search', compact('users'));
}
}
在上面的代码中,我们使用User::query()
创建了一个查询对象$query
,然后通过判断查询字符串中是否带有name
,email
和gender
三个参数来构造搜索条件。如果一个参数是存在的,就将相应的条件加入到查询对象中。最后,我们使用$query->get()
获取所有符合条件的用户,并将它们传递到视图中进行渲染。
总结
通过本文的学习,我们了解到了在Laravel中使用Eloquent进行模糊查询的方法,以及如何通过表单构造查询条件和如何获取符合条件的数据。在实际开发中,我们可以参考本文的方法进行开发,来实现一些常见的搜索功能。