Laravel всегда устанавливает значение по умолчанию

Я пытаюсь выполнить регистрацию с загрузкой изображения профиля пользователя (я вынужден сделать это таким образом) Я создал миграцию так:

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('nom');
        $table->string('prenom');
        $table->string('type')->default('visiteur');
        $table->boolean('confirme')->default(false);
        $table->string('email')->unique();
        $table->string('password');
        $table->string('photo_url')->default('default_photo_profile.jpg');
        $table->rememberToken();
        $table->timestamps();
    });

функция создания:

$request = request();


if ($request->hasFile('photo')) {
            $file = $request->file('photo');
            $fullname=$data['nom'].'_'.date("Y-m-d",time()).'.'.$file->getClientOriginalExtension();
            $path = $request->file('photo')->storeAs('images', $fullname);
        }

        return User::create([
            'nom' => $data['nom'],
            'prenom' => $data['prenom'],
            'email' => $data['email'],
            'photo_url' => $fullname,
            'password' => Hash::make($data['password']),
        ]);
  }

а форма для поля файла такая:

<div class = "form-group">
    <label for = "photo_url">Photo profile</label>
    <input type = "file" name = "photo" class = "form-control-file" id = "photo_url">
</div>

все работает нормально, кроме поля photo_url, оно всегда устанавливает значение по умолчанию при миграции, а не значение, которое я установил в функции создания. $ fullname инициировано и уже объявлено.

вся форма:

<form method = "POST" action = "{{ route('register') }}" aria-label = "{{ __('Register') }}"  enctype = "multipart/form-data">
                    @csrf

                    <div class = "form-group row">
                        <label for = "nom" class = "col-md-4 col-form-label text-md-right">Nom</label>

                        <div class = "col-md-6">
                            <input id = "nom" type = "text" class = "form-control{{ $errors->has('nom') ? ' is-invalid' : '' }}" name = "nom" value = "{{ old('nom') }}" required autofocus>

                            @if ($errors->has('nom'))
                                <span class = "invalid-feedback" role = "alert">
                                    <strong>{{ $errors->first('nom') }}</strong>
                                </span>
                            @endif
                        </div>
                    </div>

                    <div class = "form-group row">
                        <label for = "prenom" class = "col-md-4 col-form-label text-md-right">Prénom</label>

                        <div class = "col-md-6">
                            <input id = "prenom" type = "text" class = "form-control{{ $errors->has('prenom') ? ' is-invalid' : '' }}" name = "prenom" value = "{{ old('prenom') }}" required autofocus>

                            @if ($errors->has('prenom'))
                                <span class = "invalid-feedback" role = "alert">
                                    <strong>{{ $errors->first('prenom') }}</strong>
                                </span>
                            @endif
                        </div>
                    </div>

                    <div class = "form-group row">
                        <label for = "email" class = "col-md-4 col-form-label text-md-right">Email</label>

                        <div class = "col-md-6">
                            <input id = "email" type = "email" class = "form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name = "email" value = "{{ old('email') }}" required>

                            @if ($errors->has('email'))
                                <span class = "invalid-feedback" role = "alert">
                                    <strong>{{ $errors->first('email') }}</strong>
                                </span>
                            @endif
                        </div>
                    </div>

                    <div class = "form-group row">
                        <label for = "password" class = "col-md-4 col-form-label text-md-right">Mot de pass</label>

                        <div class = "col-md-6">
                            <input id = "password" type = "password" class = "form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name = "password" required>

                            @if ($errors->has('password'))
                                <span class = "invalid-feedback" role = "alert">
                                    <strong>{{ $errors->first('password') }}</strong>
                                </span>
                            @endif
                        </div>
                    </div>

                    <div class = "form-group row">
                        <label for = "password-confirm" class = "col-md-4 col-form-label text-md-right">Mot de pass confirmation</label>

                        <div class = "col-md-6">
                            <input id = "password-confirm" type = "password" class = "form-control" name = "password_confirmation" required>
                        </div>
                    </div>
                    <div class = "form-group">
                        <label for = "photo_url">Photo profile</label>
                        <input type = "file" name = "photo" class = "form-control-file" id = "photo_url">
                    </div>
                    <div class = "form-group row mb-0">
                        <div class = "col-md-6 offset-md-4">
                            <button type = "submit" class = "btn btn-primary">
                                Envoyer
                            </button>
                        </div>
                    </div>
                </form>

В чем проблема?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
21
80
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Предполагая, что у вас есть значение для $photo_url, убедитесь, что у вас есть 'photo_url' в вашем $fillables.

Когда у вас есть $ fillables, он вставляет (через User::create) только то, что есть в этом массиве, в противном случае он не отправляется для этой переменной.

Ваш $fillables должен выглядеть так:

$fillables = ['nom','prenom','type','confirme','email','password','photo_url'];

Добавьте 'photo' в массив $fillable в модели Пользователь:

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password', 'photo_url', 
];
Ответ принят как подходящий

поэтому в соответствии с вашим кодом в вашей модели вы должны добавить photo_url in $fillable array, как показано ниже.

$fillables = ['nom','prenom','type','confirme','email','password','photo_url'];

Хорошо, теперь есть 3 способа сделать это с помощью $ fillable - первый способ, и вы делаете это прямо сейчас.

2-й способ:

   if ($request->hasFile('photo')) { 
    $file = $request->file('photo'); 
    $fullname=$data['nom'].'_'.date("Y-m-d",time()).'.'.$file->getClientOriginalExtension(); 
    $path = $request->file('photo')->storeAs('images', $fullname); 
   } 
   else 
   { 
     $fullname = "default_photo_profile.jpg";  
   } 

return User::create([
            'nom' => $data['nom'],
            'prenom' => $data['prenom'],
            'email' => $data['email'],
            'photo_url' => $fullname,
            'password' => Hash::make($data['password']),
        ]);

и в вашей миграции измените этот $table->string('photo_url')->default('default_photo_profile.jpg'); на $table->string('photo_url');

3-й способ:

$fullname = "default_photo_profile.jpg";

if ($request->hasFile('photo')) {
            $file = $request->file('photo');
            $fullname=$data['nom'].'_'.date("Y-m-d",time()).'.'.$file->getClientOriginalExtension();
            $path = $request->file('photo')->storeAs('images', $fullname);

 return User::create([
            'nom' => $data['nom'],
            'prenom' => $data['prenom'],
            'email' => $data['email'],
            'photo_url' => $fullname,
            'password' => Hash::make($data['password']),
        ]);
        }

        return User::create([
            'nom' => $data['nom'],
            'prenom' => $data['prenom'],
            'email' => $data['email'],
            'photo_url' => $fullname,
            'password' => Hash::make($data['password']),
        ]);
  }

хорошо, вот способы сделать это. Я бы предпочел первый и второй способ, третий - длинный.

Примечание: для 2-го и 3-го случая, вам необходимо изменить миграцию с этого $table->string('photo_url')->default('default_photo_profile.jpg'); на $table->string('photo_url'); Надеюсь, ты понял.

Другие вопросы по теме