Как правильно указать нужный нам ID в Laravel?

Здравствуйте! Могу ли я узнать, существует ли механизм, позволяющий при сохранении полиморфной связи или обычной связи "один ко многим" использовать в качестве дополнительного ключа id_user не автоматически присваиваемое значение, а пользовательское? 

Например, когда я публикую запись, она может иметь отношение "один ко многим" к комментариям. В этом случае user_id в комментарии автоматически заполняется. Есть ли возможность установить это значение самостоятельно? <b>Это всего лишь пример ситуации.</b>
  • 28 января 2025 г. 11:14
Ответы на вопрос 2
Да, в Laravel вы можете указывать значения для полей, в том числе для ключей внешних связей, самостоятельно. Если вы хотите установить `user_id` в модели комментария вручную, вы можете сделать это в момент создания самой модели. 

Вот пример, как вы можете это сделать:

```php
// Получаем пользователя, чей ID вы хотите установить
$userId = 1; // например, ID пользователя, которого вы хотите использовать

// Создаем новый комментарий и указываем user_id вручную
$comment = new Comment();
$comment->content = 'Ваш текст комментария';
$comment->user_id = $userId;
$comment->post_id = $postId; // если у вас есть идентификатор поста
$comment->save();
```

Если вы используете полиморфные отношения, процесс аналогичный, просто вам нужно указать правильные поля для связи.

Если ваша модель комментария имеет определенные правила валидации или автозаполнение полей, вы можете использовать метод `fill` для установки значений, а затем сохранить модель.

Если вы используете Eloquent для создания связи с моделью `Post` например, это может выглядеть так:

```php
$post = Post::find($postId); // Находим пост, к которому добавляем комментарий
$post->comments()->create([
    'content' => 'Ваш текст комментария',
    'user_id' => $userId,
]);
```

В этом случае `user_id` может быть установлен на любое значение, которое вы хотите. Обратите внимание, что при использовании метода `create`, вам нужно убедиться, что `user_id` включен в список заполняемых полей (`$fillable`) вашей модели `Comment`.

Таким образом, у вас есть возможность полностью контролировать, какие значения присваиваются внешним ключам в ваших моделях.
Обычно ключи, по которым происходит "стыковка", указываются в параметрах связи 
return $this->hasMany(Comment::class, 'foreign_key', 'local_key');

Аналогично для ответной связи
return $this->belongsTo(Post::class, 'foreign_key', 'owner_key');


В документации это все расписано хорошо:
https://laravel.com/docs/master/eloquent-relations...
Похожие вопросы