Мало вещей:
Используйте create(array $attributes)
, и вы получите именно то, что хотите. Для этого вам нужно убедиться, что массив $fillable
содержит имена всех атрибутов, переданных методу create.
Вы должны использовать Observer на модели вместо слушателя (наиболее вероятный метод создания).
Персональные предпочтения при использовании Eloquent в том, что вы должны использовать id
для идентификатора (поле приращения) и забыть о пользовательских настройках между моделями, потому что по умолчанию это то, что ожидают отношения, и так далее
public function secondModels()
{
return $this->hasMany(SecondModel::class);
}
в значительной степени не сложно. Но для этой работы лучше всего было бы (также следуя рекомендациям этого парня ) FirstModel::id
, SecondModel::id
, SecondModel::first_model_id
; first_models
, second_models
в качестве имен таблиц. Избегать и / или пропускать такого рода объединение - большая часть заказной работы впоследствии. Я не говорю, что это не может быть сделано, но это не первая успешная работа.
Кроме того, если вы хотите, чтобы посетитель получил что-то, отличное от id
имени поля, вы можете создать вычисляемое поле с аксессором:
/**
* Get the user's counter.
*
* @return string
*/
public function getCounterAttribute(): string
{
return (string)$this->id;
}
Который вы вызываете тогда с $user->counter
.
Кроме того, мое личное предпочтение состоит в том, чтобы иметь как можно больше описательных имен переменных, так что мое поле uuid могло бы выглядеть примерно так:
$table->uuid('uuid4');
Это хорошо и легко сделайте практику использования Eloquent.
Сказав все это, позвольте мне сказать, что create()
и save()
будут возвращать созданный объект из базы данных, в то время как insert()
не будет этого делать.