Подскажите пожалуйста, есть ли такой механизм в builder, octobercm, который позволял бы создавать новую запись из выбранной записью, с полностью скопированный и данными? При сохранении появляется новая запись.
Копировать запись при создании с данными
Понял. Благодарю. Может у кого-то есть пример такого решения? Совсем не понимаю с чего начать
MaxOn
Я не подскажу сейчас именно по админке, но с точки зрения Eloquent это делается очень просто:
$currentItem = ItemModel::whereId($id) // любым удобным способом находим нужную нам Модель;
$newItem = currentItem->replicate() // делаем клон;
$newItem->save(); // записываем в БД
В админке теперь надо найти обработчики в List и добавить свой.
- Изменено
- Решеновыбран: [удалено]
Нашел на буржуйском сайте как это сделать:
Делаем кнопку для нужного нам контроллера, нужен файлик _list_toolbar.htm
В нем создаем новую кнопку:
<button
class="btn btn-default oc-icon-clone"
disabled="disabled"
onclick="$(this).data('request-data', {
checked: $('.control-list').listWidget('getChecked')
})"
data-request="onDuplicate"
data-request-confirm="Хотите скопировать указанные записи?"
data-trigger-action="enable"
data-trigger=".control-list input[type=checkbox]"
data-trigger-condition="checked"
data-request-success="$(this).prop('disabled', true)"
data-stripe-load-indicator>
Копировать выбранные записи
</button>
Дальше в контроллере создать метод (заменяйте только код по работе с моделью на свой
public function onDuplicate() {
$checked_items_ids = input('checked');
foreach ($checked_items_ids as $id) {
$original = Model::where("id", $id)->first(); // Вот тут надо свою модель подставить
$clone = $original->replicate();
$clone->save();
}
\Flash::success('Записи скопированы');
return $this->listRefresh();
}
Очень признателен. Спасибо!
- Изменено
Еще раз благодарю.
Подскажите пожалуйста, что нужно прописать, чтобы сохранялись еще и выбранные relation? Сейчас происходит дублирование самой записи Model, но без данных таблицы relation ($belongsToMany)
- Изменено
Нашел решение, может вдруг, кому пригодится:
public function onDuplicate() {
$checked_items_ids = input('checked');
foreach ($checked_items_ids as $id) {
$original = Model::where("id", $id)->first(); //ссылка на модель
$clone = $original->replicate();
$clone->push();
$original->load('lectors');
foreach ($original->getRelations() as $relationName => $values){
$clone->{$relationName}()->sync($values);
}
}
\Flash::success('Записи скопированы');
return $this->listRefresh();
}
Где load('lectors');
пишем свои значения: load('relation1','relation2');
НО, как сделать, чтобы и картинки, файлы дублировались не понятно Подскажите пожалуйста, если не сложно