Как сохранить в нескольких таблицах Laravel - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу сделать insertData в обеих таблицах вместе, используя Query Builder в каркасе Laravel 5.7.Но я обнаружил ошибку ввода, в результате чего может быть введена только первая таблица данных, а некоторые данные из второй таблицы не могут быть введены.Пожалуйста, помогите решить эту проблему

У меня есть две таблицы.Первая таблица - это таблица Organizer, где позже идентификатор в таблице Organizer будет введен в таблицу Users в поле userable_id, а userable_type будет загружен с string: 'organizer'

* 1009.* OrganizerController.php
public function store(Request $request)
{
    $request->validate([
        'identity_id' => 'required|string|unique:organizers',
        'full_name' => 'required|string|max:191',
        'address' => 'required|string',
        'photo' => 'required',
        'email' => 'required|string|email|max:191|unique:users',
        'password' => 'required|string',
        'home_phone' => 'numeric',
        'mobile_phone' => 'numeric',
        'line_id' => 'string',
        'facebook_id' => 'string',
        'instagram_id' => 'string',
        'website_link' => 'string',
        'status' => 'required|boolean',
        'userable_id' => 'required|numeric',
        'userable_type' => 'required|string'
    ]);

    $result = $this->organizerService->postData($request);

    return $result;
}

OrganizerService.php

    public function postData($params)
    {
        try {
            if (isset($params['photo']) && $params['photo'] != '') {
                $photoName = 'organizers_' . $params['identity_id'] . '_' . date('YmdHis') . '.png';
                $photoPath = Organizer::PhotoDir;

                $imgPath = move_uploaded_file($photoName, public_path() . '/app/' . $photoPath);
                unlink($imgPath);
            }

            $organizers = Organizer::create([
                'identity_id' => $params['identity_id'],
                'full_name' => $params['full_name'],
                'address' => $params['address'],
                'photo' => $photoName,
                'home_phone' => $params['home_phone'],
                'mobile_phone' => $params['mobile_phone'],
                'line_id' => $params['line_id'],
                'instagram_id' => $params['instagram_id'],
                'facebook_id' => $params['facebook_id'],
                'website_link' => $params['website_link'],
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s')
            ])->save();

            if (isset($params['userable_type']) && $params['userable_type'] != '') {
                $userableType = 'organizers';
            }

            if (isset($params['userable_id']) && $params['userable_id'] != '') {
                $userableId = $organizers->id;
            }

            DB::table('users')->insert([
                'email' => $params['email'],
                'password' => Hash::make($params['password']),
                'userable_id' => $userableId,
                'userable_type' => $userableType,
                'status' => $params['status'],
                'created_at' => $organizers->created_at,
                'updated_at' => $organizers->updated_at
            ]);

            $this->response['status'] = self::SUCCESS_STATUS;
            $this->response['message'] = self::SUCCESS_MESSAGE;
            $this->response['result'] = $params;
        } catch (\Exception $e) {
            $this->response['result'] = $params;
            $log = ['Service' => 'OrganizerService', 'function' => 'postDataOrganizer', 'params' => $params];
//            logError($e, $log);
        }
        return $this->response['result'];
    }

Перед вставкой данных выполняется проверка данных, так что только userable_id данные не вводятся.После того, как я вставил данные, в поле userable_id не было идентификатора таблицы Organizer со следующим сообщением

errors: {userable_id: ["The userable id field is required."]}
userable_id: ["The userable id field is required."]
0: "The userable id field is required."
message: "The given data was invalid."

Если я пытаюсь удалить проверку userable_id, результаты вставки принимаются какthis

{
address: "1"
created_at: null
email: "1@mail.com"
facebook_id: "1"
full_name: "1"
home_phone: 1
id: null
identity_id: "1111111"
instagram_id: "1"
line_id: "1"
mobile_phone: 1
password: "11111111111"
photo:'test.jpg'
status: "1"
updated_at: null
userable_id: null
userable_type: "organizer"
website_link: "1"
}

Я также пытался использовать только метод Eloquent и смешивать его, но все еще не нашел результатов.Пожалуйста, помогите:)

...