Laravel 9, родительская детская массовая вставка при замене UUID на ID ⇐ Php

Кемеровские программисты php общаются здесь
Anonymous
Laravel 9, родительская детская массовая вставка при замене UUID на ID

Сообщение Anonymous »

Я имею следующую структуру таблицы. < /p>
Таблица: Фильмы < /code> < /p>



id < /th>
< /th> < /br /> < /br /> < /br /> < /br /> < /br /> < /br /th> < /br /> < /br /th> < /br /> < /br /th> < /br /> < /br /> < /br /th> < /th> < /br /> < /br /> < /th> < /th> < /th> />...
< /tr>
< /thead>


1 < /td>
uuid-m01 < /td>
movie 1 < /td>
>. /> < /tbody>
< /table> < /div>
Таблица: Категории < /code> < /p>



id < /th>


< /th>
/> title < /th>
функционал>. />....
< /tr>

2 < /td>
uuid-c02 < /td>
категория 2 < /td>
...
< /tr>

/>
Table: movie_categories



id
movie_id
category_id
uuid < /th>
...
< /tr>
< /thead>


.. >
.... />.....................td>
...>



post: .../api/movies/create
{
"title": "movie 2",
"category_ids": [
"uuid-c01",
"uuid-c02"
]
}

models/apis/v1/movie.php

Код: Выделить всё

class Movie extends Model {
...

public function movieCategories() {
return $this->hasMany(MovieCategory::class);
}

...
}
models/apis/v1/moviecategory.php

Код: Выделить всё

class MovieCategory extends Model {
...

public function movie() {
return $this->belongsTo(Movie::class);
}
public function category() {
return $this->hasOne(Category::class);
}
}
models/apis/v1/category.php

Код: Выделить всё

class Category extends Model {
public function movieCategory() {
return $this->belongsTo(MovieCategory::class);
}
}
concrollers/apis/v1/moviecontroller.php
написан

Код: Выделить всё

public function store(MovieRequest $request) {
try {
$Post = $request->validated();

$Movie = Movie::create([
'uuid'  => Str::uuid(),
'title' => $Post['title'],
]);

$Movie->movieCategories()->create($Post['category_ids']);

...
} catch (\Throwable $th) {
...
}
}
Теперь вопрос заключается в том, что в Category_ids я передаю uuids категорий , но в таблице Movie_categories столбец принимает идентификатор категорий . class = "lang-json prettyprint-override">

Код: Выделить всё

{
...
"error": {
"code": "22003",
"message": "SQLSTATE[22003]: Numeric value out of range: 1264 Out of
range value for column 'category_id' at row 1 (SQL:
insert into `movie_categories`
(`movie_id`, `category_id`, `uuid`, `updated_at`, `created_at`)
values
(3, uuid-c01, uuid-string, 2025-04-01 07:36:18, 2025-04-01 07:36:18))"
}
}
Whereas the output should be:
Table: movie_categories



id
movie_id
Category_ID < /th>
Uuid < /th>
функциональными /> uuid-mc3 < /td>
функциональный />....



Я знаю, что существуют различные другие способы достижения этого, такие как: наблюдатели, MySQL Triggers, выставляя идентификаторы перед вставкой, но я задавался вопросом, есть более уместные (на основе Laravel).>

Подробнее здесь: https://stackoverflow.com/questions/795 ... uuid-to-id

Вернуться в «Php»