Могу ли я сократить этот метод с помощью Ramsey Uuid

Это мой текущий метод создания;

public function create(Request $request)
{
// 1. create a uuid string
$uuid1 = Uuid::uuid1();
$uuid = $uuid1->toString();

// 2. check if it already exists in the database
$response = Response::where('uuid', $uuid)->first();

// 3. if it does, run this method again and get a new uuid
if ($response) {
return $this->create($request);
}

// 4. create an array with a uuid key and put the value in it
$data['uuid'] = $uuid;

// 5. create the record in the database
$response = Response::create($data);

// 6. look up the record I have just created to return in order to return the group
$response = Response::where('uuid', $response->uuid)->first();

// 7. redirect passing the uuid and the group
return redirect()->route('survey', ['uuid' => $response->uuid, 'group' => $response->group]);
}

Части этого кажутся немного чрезмерными. Есть ли какой-нибудь способ безопасно это исправить? В частности, шаг 6. Нет ли способа объединить его с 5 и сразу ссылаться на созданную мной запись?

Кроме того, есть ли способ, которым я могу удалить шаги 2 и 3 и быть уверенным, что Uuid никогда не будет дубликатом? Я знаю, что шансы чрезвычайно малы, но все же.

1

Решение

Получить UUID практически невозможно, поэтому вы можете безопасно удалить шаги 2 и 3. Хотя, если вы хотите проверить UUID в базе данных, вы можете использовать do-while-loop вместо шагов 1, 2 и 3:

do {
$uuid = (string) Uuid::uuid1();
} while ($response = Response::where('uuid', $uuid)->first());

Далее вам не нужно запускать шаг 6. Request::create вернет объект Eloquent Request, чтобы вы могли использовать его на шаге 7. $response->group должен быть извлечен ленивой нагрузкой.

0

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

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

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