Comparte:
No guarda el mensaje en base de datos.
62. Eloquent: Guardar relaciones
HasOne y HasMany - minuto 6:00
Tu guardas el nombre, email y msj de un usuario ya autenticado.
Yo tengo el MessagesController igual que lo haces en ese minuto y la vista create.blade de messages tambien esta igual, pero al momento de autenticarme como moderador, e intentar enviar un msj me muestra el error...
Tengo todo igual, busque en las respuestas de la pagina de udemy y ninguna me funciono, quisiera saber si pudieses ayudarme, que no logro pasar de esa parte.
Gracias.
HasOne y HasMany - minuto 6:00
Tu guardas el nombre, email y msj de un usuario ya autenticado.
Yo tengo el MessagesController igual que lo haces en ese minuto y la vista create.blade de messages tambien esta igual, pero al momento de autenticarme como moderador, e intentar enviar un msj me muestra el error...
Tengo todo igual, busque en las respuestas de la pagina de udemy y ninguna me funciono, quisiera saber si pudieses ayudarme, que no logro pasar de esa parte.
Gracias.
Intente enviar un msj con moderador.
Un ejemplo de como detonar este error seria teniendo una tabla algo así:
Aquí tendríamos 3 posibilidades por las que podría arrojar error:
1.- El campo "title" en nuestro modelo no esta definido en la propiedad $fillable ,por lo que eloquent jamás va a intentar guardar ese campo.
2.-$request->title devuelve un nulo;
3-En tu formulario el campo "title" no tiene la propiedad name="title"(es básicamente lo mismo que el error 2).
class Message extends Model
{
protected $fillable = [
'nombre',
'email',
'mensaje'
];
Este es mi controlador de MessagesController:
public function store(Request $request)
{
$message = Message::create($request->all());
// if (auth()->check())
// {
// auth()->user()->messages()->save($message);
// }
$message->user_id = auth()->id();
$message->save;
y de ninguna de esas dos formas, inserta el nombre, aclaro que el modelo y el controlador, estan iguales que como lo escribe en el video Jorge.
al parecer no toma ni el nombre ni el mail del usuario autenticado ):
{!! csrf_field() !!}
@if(auth()->guest())
<p><label for="nombre">
Nombre
<input class="form-control" type="text" name="nombre" value="{{ old ('nombre')}}">
{!! $errors->first('nombre','<span class=error>:message</span>') !!}
</label></p>
<p><label for="email">
Email
<input class="form-control" type="text" name="email" value="{{ old ('email')}}">
{!! $errors->first('email','<span class=error>:message</span>') !!}
</label></p>
pues si lo tengo en los dos, por eso es que no encuentro el porque no guarda.
De igual manera puedes pasarme tu proyecto por wetransfer para revisarlo y ayudarte a encontrar el error,aunque lo mejor seria que tu lo encontraras para que sepas bien por que se dio :p
en el video lo muestras asi, luego en el formulario de crear, haces un if para quitar los campos de nombre y mail para un usuario validado y cuando tu en el video envias el msj si te funciona y lo hago igual y a mi no xd jajajaja
que triste llevo varios dias cambiadole, agragandole y no funciona, a que correo te podria enviar el proyecto, ya necesito seguir no he pasado de esa parte.
este es el link de wetransfer: https://we.tl/t-PWmwAg4qaZ
Gracias de nuevo.
Intenta correr lo siguiente en tu consola:
Te recomiendo agregar esta validacion a tu metodo store:
1.- Modelo Message
cambia esto
2.- Controllador MessagesController
debe quedar asi
Tambien puedes hacerlo alterando la vista messages.create de la siguiente manera:
Ahora permite explicarte bien que esta pasando.
En tu vista messages.create tienes lo siguiente :
Aqui es donde entra la validacion que acabo de agregar(puedes usar un form request si gustas)
Una vez hecho esto tenemos que "reemplazar" el valor que le vamos a pasar a nuestra funcion create si el usuario esta autenticado:
Esto lo hacemos de la manera mas simple,creando un arreglo y pasando lo siguiente:
Ahora simplemente queda reemplazar lo que se le esta pasando a la funcion create de la siguiente manera:
En el video no se hace todo eso, y pues con TODA LA RAZON no funcionaba mi proyecto ):
(pero todo lo que hiciste es para una version de laravel mas reciente se supone entonces)
Y si, era con un usuario autenticado.
No se como agradecerte eso, de verdad <3
Dios te bendiga jajajaja lo intentare de una vez.
Toda esa sintaxis la puedes "acortar" usando un operador ternario:
Si mal no recuerdo el instructor resolvió ese problema de una manera similar, tendría que revisar el video para confirmar.
SI quieres acortar la sintaxis del controlador puedes también hacer lo siguiente:
Solo asegúrate de hacer estas asignaciones antes de proceder a validar tu request o retornara un error ya que dichos campos no existen en el request si estas autenticado.