Угловой - Сохранить в две (2) модели одновременно - PullRequest
0 голосов
/ 17 мая 2019

Я хочу создать динамическое меню и подменю, используя Angular7 и получая конечные точки от Laravel.

  1. I, чтобы сохранить в две таблицы одновременно, а также передать идентификатор таблицы main_menu в подменю

  2. Когда данные сохраняются в таблице Menu, они передают идентификатор таблицы Menu и передают его в menu_id таблицы Sub_menu

Laravel: Контроллер меню

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'descriptions' => 'required', 
        ]);

        $mainmenu = Mainenu::create($request->all());

        return response()->json([
            'message' => 'Great success! New Menu Item created',
            'mainmenu' => $mainmenu
        ]);
    }

Laravel: Контроллер SubMenu

    public function store(Request $request)
    {
        $request->validate([
            'menu_id' => 'required',
            'parent_id' => 'required'  
        ]);

        $submenu = Submenu::create($request->all());

        return response()->json([
            'message' => 'Great success! New Menu Item created',
            'submenu' => $submenu
        ]);
    }

Угловой: модель

export class Menu {
    id: number = '';
    name: string = '';
    description : string = '';
}

export class Submenu {
    id: number = '';
    menu_id: number = '';
    parent_id : number = '';
}

Service.ts

  addMenu (mainmenu): Observable<Mainmenu> {
    return this.http.post<Mainmenu>(apiUrl, mainmenu, httpOptions).pipe(
      tap((mainmenu: Mainmenu) => console.log(`added mainmenu w/ id=${mainmenu._id}`)),
      catchError(this.handleError<Mainmenu>('addMenu'))
    );
  }

Я не знаю, как идти дальше в коде

Я хочу сохранить в две таблицы одновременно, а также передать идентификатор таблицы main_menu в sub_menu как menu_id.

1 Ответ

0 голосов
/ 17 мая 2019

Вам просто нужно использовать наблюдатель

сначала вы можете получить запрос, подобный этому

id: number = '';
name: string = '';
description : string = '';
parent_id: number = ''; //If it needs to be a submenu

На контроллере меню:

public function store(Request $request)
{
    $request->validate([
        'name' => 'required',
        'descriptions' => 'required', 
    ]);

    $mainmenu = Mainmenu::create($request->except(['parent_id']));

    return response()->json([
        'message' => 'Great success! New Menu Item created',
        'mainmenu' => $mainmenu
    ]);
}

в Наблюдатель :

namespace App\Observers;

use App\Mainmenu;
use App\Submenu;

class MainmenuObserver
{
    /**
     * Handle the Mainmenu "created" event.
     *
     * @param  \App\Mainmenu  $mainmenu
     * @return void
     */
    public function created(Mainmenu $mainmenu)
    {
        $submenu = Submenu::create([
            'menu_id' => $mainmenu->id,
            'parent_id' => request()->parent_id
        ]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...