Laravel com Nitifications
Olá professor Carlos, Boa tarde!Estou com duvida em um projeto que começei com o seu curso de Laravel com Notifications. O problema é que tenho 2 tipos de usuarios, Aluno e Professor e com isso tô tentando que as notifications chegue entre eles. A lógica pra chegar as notifications do Professor pra Aluno já deu certo!Mas a de Aluno pra professor não tô conseguindo...Eu tenho uma tabela alunos_professores que faz o vinculo entre eles no caso o professor escolhe o aluno que vai ser vinculado e nessa tabela eu salvo o id_aluno e id_professor ambos são da tabelas users! Eu queria passar essa notificação por esse vinculo. Quando o professor comentar o post chega uma notificação pra o aluno agora quero que quando o aluno comente o seu post essa notificação chegue pra o professor vinculado.Não sei se eu consegui deixa o senho a parte do problema, sou novo na aréa de programação.vou colocar a minha controlerpra ficar mais claro
<?php
namespace App\Notifications;
use App\Models\Coment;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
class PostComentes extends Notification //implements ShouldQueue
{
use Queueable;
private $comment;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(Coment $comment)
{
$this->comment = $comment;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail','database'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->subject("Novo comentario:{$this->comment->title}")
->line($this->comment->body)
->action('ver os comentario', route('posts.show',$this->comment->post_id))
->line('Abraço');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
public function toDatabase($notifiable)
{
return [
'comment' => $this->comment->load('user'),
];
}
}
<?php
namespace App\Http\Controllers\Posts;
use App\Http\Requests\StoreCommentFormRequest;
use Illuminate\Http\Request;
use App\Models\Post;
use App\Http\Controllers\Controller;
use App\Notifications\PostComentes;
class CommentController extends Controller {
private $post;
public function __construct(Post $post) {
$this-> post= $post;
}
public function store(StoreCommentFormRequest $request, Post $post ) {
if( auth()->user()->tipo == "aluno" ) {
$tipo = 'alunos_professores.aluno_id';
$comment = $request->user()->coments()->create($request->all());
$posts = $this->post
->where($tipo, '=' , auth()->user()->id)
->leftjoin('alunos_professores', 'alunos_professores.aluno_id', '=' , 'posts.user_id')
->leftjoin('comments', 'comments.post_id', '=' , 'posts.id')
->select('posts.id', 'posts.user_id', 'posts.title', 'alunos_professores.aluno_id',
'alunos_professores.professor_id')
->get();
// dd($tipo);
$author = $comment->; //É aqui que eu faria a logica pra que a notication chegasse no professor professor_id
//dd($author);
//$author = $comment->post->user;
$author->notify(new PostComentes($comment));
//dd($request->all());
return redirect()
->route('tarefas.show', $comment->post->id)
->withSuccess('Comentario realizado com Sucesso');
}
if( auth()->user()->tipo == "professor" ) {
$tipo = 'alunos_professores.professor_id';
$comment = $request->user()->coments()->create($request->all());
$posts = $this->post
->where($tipo, '=' , auth()->user()->id)
->leftjoin('alunos_professores', 'alunos_professores.aluno_id', '=' , 'posts.user_id')
->leftjoin('comments', 'comments.post_id', '=' , 'posts.id')
->select('posts.id', 'posts.user_id', 'posts.title', 'alunos_professores.aluno_id',
'alunos_professores.professor_id')
->get();
// dd($tipo);
$author = $comment->post->user;
// dd($author);
$author->notify(new PostComentes($comment));
//dd($request->all());
return redirect()
->route('tarefas.show', $comment->post->id)
->withSuccess('Comentario realizado com Sucesso');
}
}
}
Olá, Rafael!
Tudo bem?
Posta o seu código no GitHub, porque assim dou uma analisada geral e procuro identificar onde você está errando.
Veja como subir um projeto Laravel para o GitHub: https://academy.especializati.com.br/aula/versionar-projeto-laravel-subir-github
Já postei meu projeto no Git: https://github.com/rafaluiz/blog-vue
Aguardo o retorno do senhor!
Olá, Rafael!
Tudo bem?
Olhei por alto o seu projeto fique com algumas dúvidas, antes de te ajudar.
Seu projeto está completo?
Está trabalhando com notificações em tempo real? Se sim, o arquivo Echo.js onde está?
Em qual(is) controller está disparando as notificações entre Aluno x Professor e vice e versa?
No aguardo amigo.
----------------------------------
Uma dica, o seu controller AlunoController pode receber um upgrade de qualidade. Enquanto estiver aqui aproveite o curso de Laravel Repositores também, certamente vai te ajudar de mais.
Oi Professor Carlos!
Tô bem sim graças a Deus
Professor eu não estou utilizando real-time e o projeto não está concluído. Só tô usando nas notificações por email e database. O problema que tô agora é em o professor receber a notificação! Se o senhor achar melhor pra explicar eu poderia passar essas informações por Whatsapp! Meu número 996831449
A controller responsavel pela troca de notications é CommentController
Obrigado por me responder.
Tomei a liberdade de refatorar o seu código, veja:
public function store(StoreCommentFormRequest $request, Post $post)
{
// Para que precisa desse tipo?
$tipo = auth()->user()->tipo == "aluno" ? 'alunos_professores.aluno_id' : 'alunos_professores.professor_id';
$comment = $request->user()->coments()->create($request->all());
// AQUELE SELECT ESTAVA ÍNUTIL
$author = $comment->post->user;
$author->notify(new PostComentes($comment));
return redirect()
->route('tarefas.show', $comment->post->id)
->withSuccess('Comentario realizado com Sucesso');
}
Boa noite, Professor!
Para simplificar a minha dúvida gostaria de enviar o comentário não para quem
criou o post e sim especificar para qual o usuário enviar.
public function store(StoreCommentFormRequest $request) {
$comment = $request->user()->coments()->create($request->all());
$author = $comment->post->user; //aqui eu só consigo enviar a notificação pra quem é dono do post
$author->notify(new PostComentes($comment));
return redirect()
->route('tarefas.show', $comment->post->id)
->withSuccess('Comentario realizado com Sucesso');
}
* Quero enviar uma notificação para o usuário 4 lá da minha tabela users.
Alunos e Professores estão na tabela users?
Em qual Model você definiu os relacionamento entre eles? N:N
Porque basta pegar os alunos a partir do relacionamento com o professor, e dentro de um loop mesmo disparar as notificações para os alunos daquele professor.
Ex:
$teacher = auth()->user();
$students = $teacher->students;
foreach ($students as $student) {
$student->notify(new NomeNotificacao($variavelAlgo));
}
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!