Я хочу правильно сохранить оба полиморфных отношения одновременно. Код ниже работает, но я считаю, что он может быть намного чище, поскольку я полагаю, что два метода update()
дважды вызывают базу данных.Сохранение обоих полиморфных связей в то же время в Laravel 5.3
A NewsModule::class
может иметь различные элементы модуля; VideoModule
, TextModule
, ImageModule
и еще несколько. Каждый из них содержит свой собственный контент, который должен быть прикреплен к родительскому NewsModule
.
Как уже упоминалось, код работает так, что отношения настроены правильно, но я убежден, что есть более простой способ сэкономить одновременно.
Я также открываю предложения по очистке заявлений if
. Но, возможно, это еще один пост.
public function update(Request $request, $id)
{
$module = NewsModule::find($id);
if ($module->type === 'text') {
$content = TextModule::find($module->content_id);
} elseif ($module->type === 'image') {
$content = ImageModule::find($module->content_id);
};
$module->update($request->all());
$content->update($request->all());
return fractal()
->item($module, new NewsModuleTransformer)
->parseIncludes(['content'])
->toArray();
}
обновление (больше кода по запросу) ...
Состав:
news_modules
- id
- content_id
- content_type
- etc
text_modules
- id
- content
- etc
image_modules
- id
- image_id
- etc
NewsModule:
class NewsModule extends Model
{
public function content()
{
return $this->morphTo();
}
}
Все модули пункт:
class TextModule extends Model
{
public function newsmodules()
{
return $this->morphMany(NewsModule::class, 'content');
}
}
ли как модуль и содержание связаны к той же таблице? Можете ли вы рассказать о своей структуре таблиц? – Paras
@paras Я только что добавил больше структуры модели выше –
Я не понимаю ваш вопрос. Вы говорите, что оба обновления могут быть одним запросом, но они представляют собой две разные таблицы.Итак, как вы ожидаете, что они будут единственным запросом? – Paras