Php 筛选特定列,如果匹配,则获取记录
我在拉威尔5.2频道。如果与查询中的给定条件匹配,如何筛选特定列 例如,我有一张像这样的唱片 列[id]=>“1”,列[username]=>“id\U 45820”,列[contents]=> “测试”,列[to]=>“管理员,id_45820,用户”,列[created_at]=>”, 列[更新位置]=>“” 我有两个变量作为标准Php 筛选特定列,如果匹配,则获取记录,php,mysql,laravel,laravel-5.2,Php,Mysql,Laravel,Laravel 5.2,我在拉威尔5.2频道。如果与查询中的给定条件匹配,如何筛选特定列 例如,我有一张像这样的唱片 列[id]=>“1”,列[username]=>“id\U 45820”,列[contents]=> “测试”,列[to]=>“管理员,id_45820,用户”,列[created_at]=>”, 列[更新位置]=>“” 我有两个变量作为标准 $role = 'user'; $username = 'id_45820'; 现在,我想使用“$role”和“$username”变量过滤“to”列,如果“$
$role = 'user';
$username = 'id_45820';
现在,我想使用“$role”和“$username”变量过滤“to”列,如果“$role”或“$username”或两者都与“to”列的内容匹配(用逗号分隔),那么就拉取该记录,这可能吗
$q = notifications::where(function($query){
//I just don't know how to do it. Help please?
})->get();
如果我正确理解了你的问题,那么:
$role = 'user';
$username = 'id_45820';
$q = notifications::where(function($query) use($role, $username) {
$query->where('to', 'like', "%{$role}%")
->orWhere('to', 'like', "%{$username}%");
})->get();
正如你所说的,你想检查其中一个或两个是否存在,那么你只需要检查其中一个是否存在
希望这有帮助
admin,id_45820,user
如何以逗号分隔存储?你是什么意思?我不太明白。存储起来很容易,因为“to”列是一个变量,所以在我的控制器中保存新记录时,我只需将它存储为一个字符串,这样它就由“roles and username”组成,用逗号分隔。@RossWilson的回答是正确的,但是像这样的是一个非常昂贵的操作,所以我相信你应该考虑重新设计数据库。@Aleksejj你的意思是,使用“like”会消耗大量资源?@CodeDemon是的,这就是我的意思。为什么“{$role}%”与“{$username%}”不同,在“{$username%}”中,右“%”在“}”之前?@CodeDemon…打字错误。此外,请确保您使用的是”
,而不是”
。百分比和大括号的含义是什么?@CodeDemon%
符号用于定义字符串前后的通配符(缺少字母),因此,删除第一个字段意味着字段必须以字符串开头,删除第二个字段意味着列必须以字符串结尾。结合使用{}
和“
来代替字符串连接。在上面的示例中,您实际上不需要{}
它们,但是一些开发人员总是使用它们,因为这样更容易注意到正在发生的事情。
$q=notifications::where('to', 'like', '%' . $role . '%')
->orWhere('to', 'like', '%' . $user . '%')
->get();