Скрипт запуска записи базы данных обновления Laravel

Я хочу обновить любые записи в моей базе данных с помощью скрипта SQL, используя artisan. Например, мне нужно выполнить такую ​​команду:

UPDATE translations SET field = 'meta_desc' WHERE field = 'page_desc'

Какая структура Laravel будет лучшим решением? Сид, миграции, фабрики?


person Paul Basenko    schedule 29.06.2017    source источник
comment
Используйте консольную команду. См. документы laravel.com/docs/5.4/artisan#writing-commands.   -  person Sagar Gautam    schedule 29.06.2017
comment
Мне нужно запустить этот скрипт, развертывающий изменения моей БД в БД на рабочем сервере, поэтому вы предлагаете мне писать новую команду artisan каждый раз, когда я хочу что-то изменить на рабочем сервере? Извините, но это плохое решение для меня...   -  person Paul Basenko    schedule 29.06.2017
comment
Итак, вы хотите создать команду, содержимое которой является динамическим и выполняет различные SQL-запросы. Я прав?   -  person Sagar Gautam    schedule 29.06.2017
comment
@ Тройер нравится что?   -  person Paul Basenko    schedule 29.06.2017
comment
@SagarGautam да, я хочу дать своим разработчикам возможность самым простым способом развернуть изменения моей БД в производстве) Итак, я думаю, запуск скрипта или команды в консоли будет идеальным.   -  person Paul Basenko    schedule 29.06.2017
comment
Хороший вопрос, я не слишком много об этом знаю, кто-нибудь может ответить здесь, удачи.   -  person Sagar Gautam    schedule 29.06.2017
comment
Я бы предложил здесь использовать миграции, так как они будут запускаться только один раз и по порядку. Кроме того, если по какой-либо причине вам нужно выполнить откат, вы сможете сделать это с помощью метода down().   -  person Rwd    schedule 29.06.2017
comment
@RossWilson, но миграции используются для изменения структуры, не так ли? Если вы знаете, как изменить данные БД с помощью миграции, подскажите, пожалуйста.   -  person Paul Basenko    schedule 29.06.2017
comment
Да, в первую очередь вы должны использовать миграции для изменения структуры базы данных, но если вы вносите изменения, которые вам нужны, из-за изменений, которые вы внесли в свой код, то я не понимаю, почему это может быть проблемой. По сути, когда выполняется миграция, она просто вызывает метод up() (или down() при откате), поэтому вам нужно будет только иметь запрос в методе up() (т.е. удалить код Schema::, который мог быть сгенерирован), например. public function run() { DB::select('YOUR QUERY'); }. Конечно, вы можете использовать беглый запрос или даже Eloquent, если хотите.   -  person Rwd    schedule 29.06.2017
comment
@RossWilson спасибо за ответ, но я все еще не думаю, что хорошо вносить такие изменения с помощью миграций...   -  person Paul Basenko    schedule 29.06.2017
comment
@PaulBasenko Это нормально :). Почему вы считаете, что это не будет хорошей идеей? Если вы не обновите базу данных, это приведет к поломке вашего приложения?   -  person Rwd    schedule 29.06.2017


Ответы (2)


Спасибо всем за ответы. Особенно спасибо @RossWilson за его идею использования миграций для изменения данных БД.

Но я думаю, что это не очень хорошее решение, потому что концепция Laravel предполагает использование миграций для изменения структуры БД.

Прочитав руководства по Laravel, я обнаружил, что существует специальная структура кода для работы с данными db. Это начальное число. Итак, я решил свою проблему, используя следующее семя для моего примера запроса выше:

  1. Создал новое семя с помощью команды artisan:

    php artisan make:seed UpdateTranslationsSeeder
    
  2. Напишите код внутри метода run():

    DB::table('translations')->where('field', 'page_desc')->update(['field' => 'meta_desc']);
    
  3. Запускаем мою сеялку в artisan:

    php artisan db:seed --class=UpdateTranslationsSeeder
    

Примечание: если после выполнения последней команды в консоли у меня появляется ошибка о том, что класс UpdateTranslationsSeeder не определен, выполните следующую команду в консоли, чтобы сообщить Laravel о новых классах:

composer dump-autoload -o
person Paul Basenko    schedule 29.06.2017

Я адаптировал подход Павла Басенко к обновлению существующих данных в образовательных целях. Это было очень полезно! Вот мой пример:

  1. Создайте сидер:

    php artisan make:seed UpdateCustomerSeeder
    
  2. Добавьте код внутри метода запуска:

    $customers = Customer::all();
    
    $customers->each(function ($customer_update, $key) {
        $faker = Factory::create('it_IT');
    
        $customer_update->name = $faker->company;
        $customer_update->website = $faker->domainName;
        $customer_update->tax_number = $faker->vatId();
        $customer_update->phone = $faker->phoneNumber;
        $customer_update->email = $faker->safeEmail;
        $customer_update->street = $faker->streetAddress;
        $customer_update->city = $faker->city;
        $customer_update->zip_code = $faker->postcode;
        $customer_update->notes = $faker->sentence();
    
        $customer_update->save();
    });
    
  3. Запустить сеялку:

    php artisan db:seed --class=UpdateCustomerSeeder
    
person Matrizlab    schedule 26.02.2020