Хобрук: Ваш путь к мастерству в программировании

Laravel & Eloquent: правильный способ одновременного сохранения данных в двух моделях, для которого требуется идентификатор каждой из них в качестве внешнего ключа в другой.

Когда создается новая страница, часть этих данных поступает в модель слагов (URL-адрес слагов, тип шаблона, идентификатор шаблона), это стандартно для каждой страницы, затем остальные данные отправляются в модель шаблона, в данном случае называемую текстом ( простая текстовая страница).

Слаг требуется для example.com/{slug}, который захватывает slug_url и ищет соответствующую страницу/шаблон для создания правильного представления и передачи правильных данных.

Логика:

Slug requires Text id
Text requires Slug id

Но поскольку я должен сохранять их одновременно, я не уверен, как получить идентификатор одного и одновременно передать его другому, поэтому я придумал это:

  1. Сохранить новый слаг
  2. Сохранить новый текст (шаблон страницы)
  3. Обновить слаг с текстовым идентификатором

Вот код нарушения - TextsController:

public function store()
{

    $validator = Validator::make(Input::all(),
        array(
            'title'      => 'required',
            'slug_url'   => 'required',
            'menu_order' => 'required|numeric'
        )
    );

    if($validator->fails()) { 

        Flash::error('Page not created! Please check errors below');
        return Redirect::route('app.pages.index')->withErrors($validator);

    } else {

        $slug = new Slug;
        $slug->user_id     = Auth::id();
        $slug->slug_url    = Input::get('slug_url');
        $slug->type        = Input::get('type');
        $slug->menu_order  = Input::get('menu_order');
        $slug->save();

        $text = new Text;
        $text->user_id = Auth::id();
        $text->slug_id = $slug->id;
        $text->title   = Input::get('title');
        $text->active  = Input::get('active');
        $text->save();

        $slug_update = Slug::where('user_id', Auth::user()->id)->where('slug_url', $slug->slug_url)->first();
        $slug_update->type_id = $text->id;
        $slug_update->update();

        return Redirect::route('app.texts.edit', $text->id);

    }

}

Я новичок в Laravel (и в разработке в целом), но из того, что я видел до сих пор, я почти уверен, что должен быть более чистый способ сделать это?


Ответы:


1

Вы можете изменить эти строки:

   $slug_update = Slug::where('user_id', Auth::user()->id)->where('slug_url', $slug->slug_url)->first();
   $slug_update->type_id = $text->id;
   $slug_update->update();

в:

   $slug->type_id = $text->id;
   $slug->save();
05.10.2014
  • Спасибо @Marcin, это сработало. Итак, просто чтобы подтвердить трехэтапный процесс «Сохранить слаг», «Сохранить текст», а затем обновить слаг, это правильный способ сделать это? 05.10.2014
  • @JackBarham Да, я думаю, в этом случае другого пути нет. Однако очень странно, что у вас есть внешние ключи в обеих таблицах, обычно вы используете их только в одной таблице, а не в двух. 05.10.2014
  • Я пока только экспериментирую, привыкаю к ​​сохранению и созданию страниц. В настоящее время (и, вероятно, изменится) мне нужно вызвать page_template из slug_url-›id для общедоступных интерфейсных страниц пользователя, а в области администрирования мне нужен слаг из связанного page_template-›id — как только я получу лучше, если я уверен, что это изменится :) 07.10.2014
  • Новые материалы

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..

    Быстрая разработка: волшебный мир больших языковых моделей
    РУКОВОДСТВО Быстрая разработка: волшебный мир больших языковых моделей Подход, основанный на данных, для получения наилучшего ответа Искусство и наука Можно ли совместить машинное..