Задать вопрос
neowaring
@neowaring
Разработчик неизвестных систем

Как записать значения через модель в разные таблицы с одним ID?

При создании категорий я использую 2 таблицы category | category_description
При записи использую следующий код

В модели категории

public function getAutoIncrement() {
        $autoincrement = DB::select("SHOW TABLE STATUS LIKE 'category'");
        return $autoincrement[0]->Auto_increment;
    }


В контроллере:
$AUTOINCREMENT = $this->category->getAutoIncrement();

Category::create([
'category_id' = $AUTOINCREMENT,
'image' => $image,
'parent_id' => $request->input('parent_id'),
'status' => $request->input('status'),
'sort_order' => isset($sort_order) ? $sort_order : '0'
]);

CategoryDesc::create([
'category_id' => $AUTOINCREMENT,
'language_id' => $language->language_id,
'name' => $request->input($name),
'meta_title' => $request->input($meta_title),
'meta_description' => $request->input($meta_description)
]);


Как можно избежать получения auto_increment в начале ? Так как при такой записи он не добавляется. И следующее создание выводит SQL ошибку Duplicate. Требуется записать описание с таким же ID, как и создается категория в таблицу category.
  • Вопрос задан
  • 197 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
Простите а зачем вам такая движуха?

class Category{

...
public function description(){
     return $this->hasOne(CategoryDesc::class);
}
...
}

$category = Category::create([
'image' => $image,
'parent_id' => $request->input('parent_id'),
'status' => $request->input('status'),
'sort_order' => isset($sort_order) ? $sort_order : '0'
]);

$category->description()->create([
'language_id' => $language->language_id,
'name' => $request->input($name),
'meta_title' => $request->input($meta_title),
'meta_description' => $request->input($meta_description)
]);


З.Ы. Не говоря уж о том что в вашем коде то факт того что вы получите реальный аутоинкремент мягко говоря не гарантирован.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы