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

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

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

Логика:

Slug requires Text id
Text requires Slug id

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

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

Вот оскорбительный код — 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 (и разработке в целом), но из того, что я вижу до сих пор, я почти уверен, что должен быть более чистый способ сделать это?

0

Решение

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

   $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();
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]