1
votes

this is my controller

namespace App\Http\Controllers;

use App\Events\MessageSent; use Illuminate\Http\Request; use App\Message;

class ChatsController extends Controller {
    //
    public function __construct()
    {
        $this->middleware('auth');
    }
    public function index(){
        return view('chats');
    }
    public function fetchMessages(){
        return Message::with('user')->get;
    }
    public function sendMessage(Request $request){
        $message=auth()->user()->messages()->create([
            'message'=>$request->message
        ]);
        broadcast(new MessageSent($message->load('user')));
        return['status'=>'success'];

    }

}

vue component

export default {
        props:['user'],
        data(){
            return{
                messages:[],
                newMessage:''
            }
        },
        created() {
           this.fetchMessages();
           Echo.join('chats')
               .listen('MessageSent',(event) =>{
                   this.messages.push(event.message);
               });
        },
        methods:{
            fetchMessages(){
                axios.get('messages').then(response =>{
                    this.messages = response.data;
                })

            },
            sendMessage(){
                this.messages.push({
                    user:this.user,
                    message: this.newMessage
                })
                axios.post('messages',{message:this.newMessage});
                this.newMessage='';
            }
        }
    }

All Routes

  1. Route::get('/', function () { broadcast(new \App\Events\websocketDemoEvent('some data')); return view('welcome'); }); Route::get('/chats','ChatsController@index'); Route::get('/messages','ChatsController@fetchMessages'); Route::post('/messages','ChatsController@sendMessage'); Auth::routes();
    Route::get('/home', 'HomeController@index')->name('home');

1
please format correctly your codeAlberto Sinigaglia

1 Answers

1
votes

In your Controller, in the fetchMessages there is this line that is wrong

return Message::with('user')->get;

because get is a method, not a property, so instead you should do

return Message::with('user')->get();