Я хочу сделать 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 и смешивать его, но все еще не нашел результатов.Пожалуйста, помогите:)