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

Кемеровские программисты 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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