Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

267
Vistas
¿Hay alguna explicación para que la función de mi modelo no se pueda usar en mi controlador?

Estoy construyendo un proyecto de laravel que es una plataforma comunitaria, por lo que necesitará una lógica de seguidores (bastante similar a Twitter, Instagram, etc.). Ya creé la lógica para la autenticación y el perfil, pero, al investigar y escribir el código para el estado de los seguidores y verificar si el usuario está siguiendo a alguien, obtuve las funciones en mi modelo, que ahora es algo así como:

 namespace App\Models; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; /** * The attributes that are mass assignable. * * @var array<int, string> */ protected $fillable = [ 'name', 'email', 'password', 'phone', 'description', 'profilepicture', 'status', ]; /** * The attributes that should be hidden for serialization. * * @var array<int, string> */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast. * * @var array<string, string> */ protected $casts = [ 'email_verified_at' => 'datetime', ]; public function following() { return $this->belongsToMany('App\Models\User', 'followers', 'follower_user_id', 'user_id')->withTimestamps(); } public function isFollowing(User $user) { return !is_null($this->following()->where('user_id', $user->id)->first()); } }

Y en mi controlador de perfil, tengo:

 namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Models\User; class Profile extends Controller { public function show($id) { $user = User::where('id', $id)->firstOrFail(); $me = Auth::user(); $is_edit_profile = (Auth::id() == $user->id); $is_follow_button = (!$is_edit_profile) && (!$me->isFollowing($user)); return view('profile', ['user' => $user, 'is_edit_profile' => $is_edit_profile, 'is_follow_button' => $is_follow_button]); } }

Pero VSCode dice que tengo un método indefinido que sigue en mi controlador, en la línea:

$is_follow_button = (!$is_edit_profile) && (!$me->isFollowing($user));

Alguien tiene idea de por qué sucede esto? Estoy usando Laravel 8. Es uno de mis primeros grandes proyectos, por lo que anteriormente lamento cualquier error de novato. ¡Gracias por tu tiempo y ayuda!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Auth::user() devuelve un objeto de tipo Illuminate\Contracts\Auth\Authenticatable que no implementa isFollowing

Opción 1: puede agregar la anotación @var para especificar el tipo de su objeto

 namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Models\User; class Profile extends Controller { public function show($id) { $user = User::where('id', $id)->firstOrFail(); /** @var User $me */ $me = Auth::user(); $is_edit_profile = (Auth::id() == $user->id); $is_follow_button = (!$is_edit_profile) && (!$me->isFollowing($user)); return view('profile', ['user' => $user, 'is_edit_profile' => $is_edit_profile, 'is_follow_button' => $is_follow_button]); } }

Opción 2: puede extender la fachada de Auth creando una nueva fachada con el tipo de retorno esperado:

 namespace App\Extensions\Facades; use App\Models\User; /** * @method static User user() */ class Auth extends \Illuminate\Support\Facades\Auth { }

Y luego puedes usar esta fachada en lugar de la anterior.

 namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Extensions\Facades\Auth; use App\Models\User; class Profile extends Controller { public function show($id) { $user = User::where('id', $id)->firstOrFail(); $me = Auth::user(); $is_edit_profile = (Auth::id() == $user->id); $is_follow_button = (!$is_edit_profile) && (!$me->isFollowing($user)); return view('profile', ['user' => $user, 'is_edit_profile' => $is_edit_profile, 'is_follow_button' => $is_follow_button]); } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda