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