Допустим сложилась такая ситуация, и вам понадобилось скопировать некоторое количество записей из одной модели в другую, если это 1 запись, то можно и руками, а если их сотни?
Небольшой гайд как сделать это быстро и наглядно.
Достаточно создать route.php в папке своего плагина и написать там пару функций.
Для начала надо добавить namespace'ы откуда и куда будем переносить данные.
use Webinsane\Sitemanager\Models\{
Faq as toFaq,
Advantage as toAdv
};
use Webinsane\Sitemanage\Models\{
Faq as fromFaq,
Advantages as fromAdv
};
Следующим шагом добавим в fillable поля в которые мы собираемся произвести запись, иначе получим ошибку
(добавляем внутрь модели в которую будет производиться запись)
protected $fillable = [
'icon',
'url',
'title',
'description'
];
следующим шагом создаем роут
Route::get('migrate',` getMigrate());
при переходе по url /migrate сработает наша функция которая описана ниже
Тут всё просто, получаем полный список записей модели в которую собираемся перенести данные, очищаем очищаем ее (если надо) с помощью destroy
далее получаем записи модели из которой надо перенести данные и отправляем их в свои функции для последующей записи.
function getMigrate()
{
return function () {
$ids = toFaq::all()->lists('id');
toFaq::destroy($ids);
$ids = toAdv::all()->lists('id');
toAdv::destroy($ids);
fromFaq::all()->each(
function (fromFaq $fromFaq) {
toNewManager($fromFaq);
}
);
fromAdv::all()->each(
function (fromAdv $fromAdv) {
newAdv($fromAdv);
}
);
};
}
И собственно функции для записи данных
в атрибутах мы указываем сначала поля которые должны будут заполниться, и поля откуда будет браться информация для заполнения, вроде всё просто.
После создаем модель на основе этих полей. Вот и все.
function toNewManager(fromFaq $fromFaq)
{
$attributes = [
'question' => $fromFaq->question,
'answer' => $fromFaq->answer,
];
$toFaq = toFaq::create($attributes);
}
function newAdv(fromAdv $from)
{
$attributes = [
'icon' => $from->icon,
'url' => $from->url,
'title' => $from->title,
'description' => $from->description,
];
$toAdv = toAdv::create($attributes);
}
Теперь достаточно перейти по ссылке которые мы указали вначале нашего файла, и начнется перенос данных.
Ну собственно первый небольшой гайд, может кому то будет полезен, мне было лень переносить пол сотни записей руками, не хотелось лезть в базу, и решил сделать так)
upd:
По этому же принципу можно перенести данные из настроек темы в модель