PHP запускает необработанный SQL-запрос в красноречивой модели

Если вы хотите извлечь только положительные целые числа, попробуйте следующее:

>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]

Я бы сказал, что это лучше, чем пример регулярного выражения по трем причинам. Во-первых, вам не нужен другой модуль; во-вторых, это более читаемо, потому что вам не нужно разбирать мини-язык регулярных выражений; и, в-третьих, он быстрее (и, скорее всего, более pythonic):

python -m timeit -s "str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000" "[s for s in str.split() if s.isdigit()]"
100 loops, best of 3: 2.84 msec per loop

python -m timeit -s "import re" "str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000" "re.findall('\\b\\d+\\b', str)"
100 loops, best of 3: 5.66 msec per loop

Это не будет распознавать поплавки, отрицательные целые числа или целые числа в шестнадцатеричном формате. Если вы не можете принять эти ограничения, ответ slim ниже выполнит трюк.

0
задан twigg 13 July 2018 в 11:46
поделиться

5 ответов

использовать Laravel scopes() таким образом, вы можете легко использовать красноречивый синтаксис.

$user = new User::customQuery();

public function scopeSustomQuery($query)
{
    $query = $query->where('You condition');
    return $query;
}
0
ответ дан Adnan Mumtaz 17 August 2018 в 13:02
поделиться

попробуйте функцию whereRaw ()

https://laravel.com/docs/5.6/queries

Из документации:

Методы whereRaw и /WhereRaw могут использоваться для ввода предложения raw where в ваш запрос. Эти методы принимают необязательный массив привязок в качестве их второго аргумента:

$ orders = DB :: table ('orders') -> whereRaw ('price> IF (state = "TX",?, 100 ) ', [200]) -> get ();

0
ответ дан mehlichmeyer 17 August 2018 в 13:02
поделиться
  • 1
    Поэтому мне нужно включить DB Facades в мои модели, чтобы как-то использовать это? – twigg 13 July 2018 в 11:53
  • 2
    Нет, вам это не нужно. Это плохая практика. Вы должны использовать ORM для запросов. Также использование фасадов - тоже плохая практика. Вы должны использовать введенные классы. – Piterden 13 July 2018 в 11:54
  • 3
    Вам нужно будет использовать Eloquent \ Builder, чтобы проверить другие ответы, это всего лишь один из нескольких вариантов, которые должны работать – mehlichmeyer 13 July 2018 в 11:55

Попробуйте это и никогда не используйте необработанные запросы в Laravel

/* @var User $query */
$user = new User();

/* @var Builder $query */
$query = $user->newQuery();

dd($query->select('*')->from('_users')->get());
1
ответ дан Piterden 17 August 2018 в 13:02
поделиться
  • 1
    «никогда не используйте какие-либо необработанные запросы в Laravel». Я не использую Laravel. Вышеупомянутый запрос работает в очень простых случаях использования, но, как и в моем вопросе, у меня есть большие сложные запросы из унаследованного приложения, которые мне нужно запустить, которые просто не готовы к красноречивым запросам стиля, но поскольку база данных беспорядок – twigg 13 July 2018 в 11:55
  • 2
    gitlab.com/snippets/1682360 большой сложный запрос – Piterden 13 July 2018 в 11:57
  • 3
    это потрясающая, отличная работа, но прямо сейчас это просто не возможность конвертировать 8 000 + запросов в этом приложении в стиль Eloquent, пока еще. Это, конечно, конечная цель, но из бизнес-перспективы это просто не является финансово оправданным. Вот почему мне нужен способ отказаться от старых необработанных SQL-запросов. – twigg 13 July 2018 в 12:00
  • 4
    Обратите внимание, что я не использую Laravel только пакет Eloquent. Я получаю следующую ошибку при попытке вашего решения «RuntimeException. Корень фасада не был установлен», где вы устанавливаете корень фасада? – twigg 13 July 2018 в 13:15
  • 5
    Замените DB на Illuminate\Database\Capsule\Manager. – Jonas Staudenmeir 13 July 2018 в 13:27
  • 6
    Спасибо Jonas или добавьте пространство имен: используйте Illuminate \ Database \ Capsule \ Manager как DB; – user2745436 13 July 2018 в 13:58
  • 7
    – Piterden 14 July 2018 в 20:48

DB::raw() используется для создания произвольных команд SQL, которые больше не обрабатываются конструктором запросов. Проверьте это. link, с более подробной информацией: http://fideloper.com/laravel-raw-queries

Пример из DB::raw и DB::select

1
ответ дан Vipul 17 August 2018 в 13:02
поделиться
  • 1
    Я предполагаю, что мне нужно добавить какой-то фасад моей модели, чтобы получить эту функциональность? – twigg 13 July 2018 в 12:03
  • 2
    попробуйте использовать пространство имен \ DB. – Vipul 13 July 2018 в 12:09
1
ответ дан Piterden 6 September 2018 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: