Estou construindo um aplicativo de notas CRUD e tenho este controlador, estou tentando obter todas as notas de um usuário para exibir na página de índice, também estou usando laravel breeze. O IDE diz "Método indefinido 'id'." Eu tentei todas as soluções que pude encontrar no laracast e aqui e nada funciona, eu sei que estou esquecendo de algo, só não consigo lembrar o que é, já faz um tempo que não uso laravel. Se vocês puderem me ajudar, seria ótimo! Obrigado
<?php
namespace App\Http\Controllers;
use App\Models\Note;
use Inertia\Inertia;
use App\Http\Resources\NoteResource;
use App\Http\Requests\StoreNoteRequest;
use App\Http\Requests\UpdateNoteRequest;
class NoteController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
$notes = Note::where('user_id', auth()->id())->get();
return Inertia::render('Notes/Index', [
'notes' => NoteResource::collection($notes),
]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
return Inertia::render('Notes/Create');
}
/**
* Store a newly created resource in storage.
*/
public function store(StoreNoteRequest $request)
{
//
$note = Note::create([
'user_id' => auth()->id,
'title' => $request->title,
'content' => $request->content,
'is_pinned' => $request->is_pinned,
'color' => $request->color,
]);
return redirect()->route('notes.show', $note)->with('success', 'Note created successfully');
}
/**
* Display the specified resource.
*/
public function show(Note $note)
{
//
return Inertia::render('Notes/Show', [
'note' => new NoteResource($note),
]);
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Note $note)
{
//
return Inertia::render('Notes/Edit', [
'note' => new NoteResource($note),
]);
}
/**
* Update the specified resource in storage.
*/
public function update(UpdateNoteRequest $request, Note $note)
{
//
$note->update([
'title' => $request->title,
'content' => $request->content,
'is_pinned' => $request->is_pinned,
'color' => $request->color,
]);
return redirect()->route('notes.show', $note)->with('success', 'Note updated successfully');
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Note $Note)
{
//
$Note->delete();
return redirect()->route('notes.index')->with('success', 'Note deleted successfully');
}
public function togglePin(Note $note)
{
$note->update([
'is_pinned' => !$note->is_pinned,
]);
return redirect()->back()->with('success', 'Note pinned successfully');
}
}
Como o IDE que você está usando diz, não há um método id() encadeado ao método auth(). Se você atualizar isso para
auth()->id
, será corrigido.auth()->id no método index: Se o usuário não for autenticado, auth()->id retornará nulo. Tentar usar nulo como uma chave estrangeira na sua consulta causará problemas e, em alguns casos, pode levar ao erro "Undefined method 'id'" se o Laravel tentar convertê-lo implicitamente.