[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Rafael Luiz Andrade dos Santos
Criador Rafael Luiz Andrade dos Santos 10/05/2019

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

Criador Rafael Luiz Andrade dos Santos 10/05/2019

<?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'),
        ];
    }
}

Rafael Luiz Andrade dos Santos
Criador Rafael Luiz Andrade dos Santos 10/05/2019

<?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');







      }





    }

}

Rafael Luiz Andrade dos Santos
Manager Carlos Ferreira 10/05/2019

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

Carlos Ferreira
Criador Rafael Luiz Andrade dos Santos 10/05/2019

Já postei meu projeto no Git: https://github.com/rafaluiz/blog-vue

Aguardo o retorno do senhor!

Rafael Luiz Andrade dos Santos
Manager Carlos Ferreira 10/05/2019

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.

Carlos Ferreira
Criador Rafael Luiz Andrade dos Santos 10/05/2019

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 

 

Rafael Luiz Andrade dos Santos
Manager Carlos Ferreira 10/05/2019

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');
}

Carlos Ferreira
Criador Rafael Luiz Andrade dos Santos 10/05/2019

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.

Rafael Luiz Andrade dos Santos
Manager Carlos Ferreira 10/05/2019

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));
}

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!