Laravel Eloquent - 带有前导数字的文本字段被解释为整数

时间:2018-06-13 03:59:07

标签: laravel text casting eloquent integer

我有以下代码:

    $event = Event::where('slug', '=', $param)
        ->orWhere('eventID', '=', $param)
        ->firstOrFail();

目的是使$ event能够填充其id或短文字段中的短文本字符串。

我遇到的问题是,以数字开头的文本会导致$ event获取eventID =文本数字部分的值。

这不是理想的行为。

想法?谢谢!

1 个答案:

答案 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();