Laravel 5: SELECT REPLACE () не работает

Я хочу выполнить замену в запросе к базе данных с помощью ЗАМЕНЯТЬ(). В phpMyAdmin нет проблем с его использованием в необработанном запросе, но Laravel выдает ошибку:

Запрос:

$p = Products::select('*, REPLACE(abstract, \'[[name]]\', name) AS abstract')
->Paginate(10);

Ошибка:

QLSTATE[42S22]: Column not found: 1054 Unknown column '*,
REPLACE(abstract, '[[name]]', name)' in 'field list' (SQL: select `*,
REPLACE(abstract, '[[name]]', name)` as `abstract` from
`products` limit 3 offset 0)

Ева, если я попробую с таким массивом, возникнет ошибка.

Products::select([ 'name', 'REPLACE(abstract, \'[[name]]\', name) AS abstract' ])
->Paginate(10)

Почему здесь нельзя использовать REPLACE ()?

Просто наплевать, я никогда не использовал laravel, но вы пробовали $p = Products::select('*', 'REPLACE(abstract, \'[[name]]\', name) AS abstract') ->Paginate(10);? Документы, кажется, предполагают, что select принимает список выражений полей; в вашей первой попытке похоже, что он обрабатывает *, ... как одно поле; а ваш второй передает один массив (?), а не отдельные аргументы для каждого.

Uueerdo 20.03.2018 18:31

Да, вы не можете использовать необработанный SQL в таком выборе. Однако существует также возможность использовать DB :: raw ('select *, REPLACE (abstract, \' [[name]] \ ', name) AS abstract »); Я не уверен, работает ли paginate с результатом, может быть, вы можете протестировать и сообщить мне? ;)

Rob Biermann 20.03.2018 18:44

@Uueerdo: Нет, это срабатывает: 'SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец' REPLACE (abstract, '[[name]]', name) 'в' списке полей '(SQL: select *, REPLACE(abstract, '[[name]]', name)'

Dong3000 21.03.2018 08:26

@RobBiermann Ваше решение не вызывает исключения, но даже не заменяет иглу, как expectet. Просто ничего не заменяет ... :-)

Dong3000 21.03.2018 08:29
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
4
1 739
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Следует использовать selectRaw, иначе конструктор запросов laravel экранирует всю строку как поле.

$p = Products::selectRaw('products.*, REPLACE(abstract, \'[[name]]\', name) AS abstract')->Paginate(10);

Другие вопросы по теме