Конструктор запросов Laravel / массовое обновление Eloquent использует данные из текущего запроса

Я бы хотел сделать что-нибудь подобное Pseudocode

UPDATE `table` SET `path`=REPLACE('pathpath','other',`path`) WHERE `ready_to_publish`=1

Но я бы хотел использовать Eloquent / Query Builder. Я знаю, что он существует DB::raw, и я могу установить его напрямую, но приложение должно поддерживать многие типы СУБД, и использовать построитель запросов удобно.

Я знаю, что могу сделать это за 2 запроса

1 Получить все идентификаторы, путь, где ready_to_publish - 1 заменить в PHP 2. Построить запрос на обновление со всеми данными в цепочке.

У меня вопрос, возможно ли это в одном запросе, как в чистом SQL.

Заранее благодарим за любые подсказки.


person jaroApp    schedule 03.08.2017    source источник


Ответы (1)


Вы можете сделать это так,

Table::where('ready_to_publish',1)->update(['pathpath',$newpath]);

И вам нужно определить pathpath как заполняемый в модели, например,

protected $fillable = ['pathpath'];
person Sagar Gautam    schedule 03.08.2017
comment
Я не знаю, как я могу этим решить свою проблему. Например, мой код laravel \DB::table('files')->where('directory','layout')->update(['directory',str_replace('layout','layout.my',$directory)]);, и в этом случае я бы хотел, чтобы на месте $directory было текущее значение столбца directory. - person jaroApp; 03.08.2017
comment
@jaroApp Тогда извините, я не понял вашей проблемы - person Sagar Gautam; 03.08.2017