Когда я пытаюсь создать нового пользователя, я не могу

#php #laravel #laravel-6 #laravel-7

#php #laravel #laravel-6 #laravel-7

Вопрос:

Я пытаюсь создать CRUD с именем Usuarios (пользователи) с помощью начального ключа из таблицы Perfiles (профили), начальный ключ — это идентификатор из профилей, но я не знаю, как сделать это с помощью select

Это МОЙ FORM.BLADE.PHP

 <select name="idPerfil" id="idPerfil" class="form-control">
        <option value="">Eliga un nombre de perfil </option>
    @foreach ($perfiles as $perfil)
    
    <option value="{{ $perfil['id'] }}" 
    
 @if ($perfil->id === $usuario->idPerfil)
    selected
        
    @endif
    
    > {{ $perfil['NombrePerfil'] }}
        
    </option>      
        @endforeach
        </select>
  

PerfilesContoller.php

  public function edit($id)
{
    
    $perfil= Perfiles::findOrFail($id);

    return view('perfiles.edit',compact('perfil'));
}
  

общедоступная функция create()
{

     return view('perfiles.create');

}
  

ЭТО МОЙ USUARIOSCONTROLLER.PHP

 public function create()
    {
        //
        $perfiles = Perfiles::all();

        return view('usuarios.create',compact('perfiles'));
    }
  

редактирование общедоступной функции ($ id)
{
//

         $usuario= Usuarios::findOrFail($id);
        $perfiles = Perfiles::all();

        return view('usuarios.edit',compact('usuario','perfiles'));
    }
  

Таблица Pefiles

 public function up()
{
    Schema::create('perfiles', function (Blueprint $table) {

        $table->increments('id');
        $table->string('NombrePerfil')->unique();
        $table->timestamps();
        
    });
}
  

таблица обычаев

  public function up()
{
    
    
    Schema::create('usuarios', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('idPerfil');
        $table->string('Nombre');
        $table->string('UserName')->unique();
        $table->string('Email')->unique();
        $table->string('Password');
        $table->foreign('idPerfil')->references('id')->on('perfiles');
        $table->rememberToken();
        $table->timestamps();
    });
}
  

Комментарии:

1. Добро пожаловать в SO… где этот код, в котором вы пытаетесь создать нового пользователя и не можете? единственное представление, которое вы показываете, похоже, предназначено для редактирования пользователя, а не для создания

2. У меня есть Form.blade.php , create.blade.php и edit.blade.php , Form.blade является общим для create и edit.

Ответ №1:

Для начала я думаю, что в какой-то момент вы обращаетесь к первичному ключу так, как будто perfil это массив, а затем рассматриваете его как объект в другом, вы делаете это: $perfil['id'] вместо этого: $perfil->id . Попробуйте структурировать свой блейд следующим образом:

 <select name="idPerfil" id="idPerfil" class="form-control">
    <option value="">Eliga un nombre de perfil </option>
    @foreach ($perfiles as $perfil)
    
    <option value="{{ $perfil->id }}" 
    
        @if ($perfil->id === $usuario->idPerfil) selected @endif> 
       
       {{ $perfil->NombrePerfil }}
        
    </option>      
    @endforeach
</select>
  

Комментарии:

1. вы можете получить доступ к атрибутам модели в любом случае, они, вероятно, должны придерживаться одного, но функционально здесь это не имеет значения

2. Верно … в его вопросе так много неправильных вещей, сначала я не уверен, что он указал столбец первичного ключа при объявлении отношения в модели, потому что, если он этого не сделал, laravel по умолчанию будет использовать соглашение, perfil_id поэтому idPerfil это не сработает. Во-вторых, profile должен быть дочерним элементом user , а не наоборот, чтобы в конечном итоге это не сработало… Я только устранял очевидное.

3. Вы хотите увидеть мои таблицы?

4. Я отредактировал свой вопрос