laravel 5.6 HasMany

vamos a crear las relaciones de usuario con mensajes

un usuario puede enviar varios mensajes

un mensaje es enviado por un usuario

vamos a agregar el campo user_id en la tabla messages

desde la consola

php artisan make:migration add_user_to_messages --table=messages

vamos al archivo generado y editamos el up y el down

public function up()
    {
        Schema::table('messages', function (Blueprint $table) {
            //
            $table->integer('user_id')->nullable();
        });
    } 

 public function down()
    {
        Schema::table('messages', function (Blueprint $table) {
            //
            $table->dropColumn('user_id');
        });
    }


y ejecutamos la migration asi:

php artisan migrate

Vamos a la clase User y creemos la relacion con messages

creamos 

public function messages(){
        return $this->hasMany(Message::class);
}

y en la clase Message

creamos la relacion

public function user()
{
return $this->belongsTo(User::class);
}


Ahora en la pagina de creacion de mensaje, vamos a mostrar el campo name e email del formulario
solo para los casos en que se haya entrado sin loguearse
(si se esta logueado se envian estos campos como hiddens con los valores correspondientes al usuario logueado)

en el controller

modificamos la funcion store:

public function store(ContactoRequest $request)
    {
     
        $message = Message::create($request->all());

        if(auth()->check()){
            auth()->user()->messages()->save($message);
        }
        return redirect()->route('mensajes.create');
    }

entonces en /views/messages/index.blade.php

podemos mostrar el nombre y email del user logueado que envio el mensaje
asi:

@if($message->user_id)
<td> {{$message->user->name}}</td>
<td>{{$message->user->email}}</td>
@



si los mensajes pueden ser enviados por usuarios logueados, la funcion store del controller podria simplificarse de este modo

auth()->user()->messages()->create($request->all());



No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable