Laravel 多列雄辩搜索查询

问题描述 投票:0回答:4

我是 Laravel 的新手,目前正在使用 Laravel4。我正在尝试在我的项目中添加多列搜索功能。我可以进行单列雄辩搜索查询,但老实说我不知道如何进行多列雄辩搜索查询在 laravel 中。我有 两个下拉菜单

1.地点 2.血型。

我想搜索具有特定血型和特定位置用户。也就是说,用户将从这两个下拉菜单中一次选择位置血型,然后单击搜索按钮.

在我的数据库中,我有两列,一列包含某个用户的位置,另一列包含某个用户的血型。现在,这样的搜索的雄辩查询应该是什么?

mysql sql laravel-4
4个回答
66
投票

只需将

where
链接到您需要搜索的每个字段即可:

// AND
$results = SomeModel::where('location', $location)->where('blood_group', $bloodGroup)->get();

// OR
$results = SomeModel::where('location', $location)->orWhere('blood_group', $bloodGroup)->get();

借助示波器,您可以更轻松地使用:

// SomeModel class
public function scopeSearchLocation($query, $location)
{
  if ($location) $query->where('location', $location);
}

public function scopeSearchBloodGroup($query, $bloodGroup)
{
  if ($bloodGroup) $query->where('blood_group', $bloodGroup);
}

// then 
SomeModel::searchBloodGroup($bloodGroup)->searchLocation($location)->get();

只是一个合理的示例,请根据您的需要进行调整。


0
投票

这是一个很好的方法,但我认为某处存在错误,因为 laravel 不允许您访问非静态函数,所以不要使用

SomeModel::searchBloodGroup($bloodGroup)->searchLocation($location)->get(); 

你可以简单地使用

SomeModel::BloodGroup($bloodGroup)->Location($location)->get();

注意searchBloodGroup已更改为BloodGroup,这就是您将其用于所有其他人的方式。


0
投票
    $errors = $connection->table('test_sessions_table')
->where('user_id', $user->id)
->where('status_question', 'false')->count('status_question');

在此方法中,您的代码采用以下形式 SQL代码

select count(`status_question`) as aggregate from `test_sessions_table` where `user_id` = ? and `status_question` = ?

或者你的代码看起来像这样

$errors = $connection->table('test_sessions_table')
->where('user_id', $user->id)
->orWhere('status_question', 'false')->count('status_question');

SQL代码

select count(`status_question`) as aggregate from `test_sessions_table` where `user_id` = ? or `status_question` = ?

我个人建议使用两个“where”


0
投票

您可以尝试另一种更简单的方法

$datas2 = SomeModel::where('location' ,'LIKE', $request['location_id'] ?? '%' )
->where('bloodGroup' ,'LIKE', $request['bloodGroup_id'] ?? '%'  )->get();
© www.soinside.com 2019 - 2024. All rights reserved.