У меня есть модель под названием «Изображение» и таблица под названием «изображения». В таблице есть столбец для идентификатора и еще один столбец для имени. Мне нужно получить только те строки, имя которых начинается с числа.

Мне нужно получить, что-то вроде

16783521_facebook.png

А остальные что-то вроде ...

twiter.png
0
Vijayanand Premnath 10 Май 2016 в 13:59

4 ответа

Лучший ответ

Попробуй это:

Image::whereRaw("name REGEXP '^[0-9]'") -> get();

Если вы собираетесь использовать его более чем в одном месте, подумайте о переносе его в прицел.

В вашей модели изображения определите что-то вроде:

public function scopeNumeric($query)
{
    return $query -> whereRaw("name REGEXP '^[0-9]'");
}

Тогда вы можете просто использовать:

Image::numeric() -> get();
1
Matt McDonald 10 Май 2016 в 11:23

Я мало что знаю о laravel, но этот простой запрос поможет -

ВЫБЕРИТЕ * ИЗ mytable WHERE mycolumn REGEXP '^ [0-9] + $' или
ВЫБЕРИТЕ * ИЗ myTable WHERE col1 REGEXP '[0-9] +';

1
AShly 10 Май 2016 в 11:05

Laravel не имеет такой встроенной функции, поэтому вам придется обходиться необработанными запросами. В базовой форме:

$results = SomeModel::whereRaw("some_column REGEXP '^[0-9]'")->get();

Вы можете изменить это, как обычно, с помощью выбора, других ограничений и т. Д., Как вам нужно.

1
Joel Hinz 10 Май 2016 в 11:14

Отфильтруйте изображения после запроса, используя один из методов сбора. Как показано ниже, я решил.

$onlyNumeric = $photos->filter(function ($value, $key) {
return is_numeric(substr($value, 0, 1));
});
0
Vijayanand Premnath 10 Май 2016 в 11:18