我有以下代码:
$event = Event::where('slug', '=', $param)
->orWhere('eventID', '=', $param)
->firstOrFail();
目的是使$ event能够填充其id或短文字段中的短文本字符串。
我遇到的问题是,以数字开头的文本会导致$ event获取eventID =文本数字部分的值。
这不是理想的行为。
想法?谢谢!
答案 0 :(得分:2)
您需要检查$param
是否为整数值,并依赖于进行查询。使用 laravel版本>的when
方法很容易。 5.3 即可。对于旧版本,逻辑将是相同的但不使用when
方法,因为它没有第三个参数。
$event = Event::when(filter_var($param, FILTER_VALIDATE_INT) !== false,
function($query) use ($param){
return $query->where('eventID', $param);
},
function($query) use ($param){
return $query->where('slug', $param);
}
)->firstOrFail();
其他方式:
$event = Event::query();
$event = filter_var($param, FILTER_VALIDATE_INT) !== false ? $event->where('eventID', $param) : $event->where('slug', $param);
$event = $event->firstOrFail();