Laravel调用photos()方法提示Undefined method错误排查求助
Laravel 用户照片管理关联报错排查
我用Laravel开发用户照片管理页面,通过App/Models目录下的模型定义关联关系来实现功能。在User模型中创建了photos()方法后,在PhotoController的manage方法里调用auth()->user()->photos()时,收到错误提示:Undefined method 'photos'.intelephense(1013)。已经尝试在PhotoController中引入App/Models/User但问题仍未解决,求排查错误原因。
PhotoController 代码
<?php namespace App\Http\Controllers; use App\Models\Photos; use Illuminate\Http\Request; use Illuminate\Validation\Rule; use Barryvdh\Debugbar\Facades\Debugbar; class PhotoController extends Controller { //show all photos public function index() { DebugBar::info('Showing the Message!'); return view('listpg', [ 'photos' => Photos::latest()->filter(request(['tag', 'search']))->paginate(6) ]); } //show single photo public function show(Photos $photo) { return view('photo', [ 'photo' => $photo ]); } //creation form public function create() { return view('create'); } //store photo public function store(Request $request) { $formFields = $request->validate([ 'title' => 'required', 'name' => ['required',Rule::unique('photos', 'name')], 'tags' => 'required', 'body' => 'required' ]); if($request->hasFile('image_path')) { $formFields['image_path'] = $request->file('image_path')->store('images', 'public'); } $formFields['user_id'] = auth()->id(); Photos::create($formFields); return redirect('/')->with('message', 'Post created successfully!'); } //Edit form public function edit(Photos $photo) { return view('edit', ['photo' => $photo]); } //update photo public function update(Request $request, Photos $photo) { $formFields = $request->validate([ 'title' => 'required', 'name' => ['required'], 'tags' => 'required', 'body' => 'required' ]); if($request->hasFile('image_path')) { $formFields['image_path'] = $request->file('image_path')->store('images', 'public'); } $photo->update($formFields); return back()->with('message', 'Post updated successfully!'); } //Delete Listing public function destroy(Photos $photo){ $photo->delete(); return redirect('/')->with('message', 'Post deleted successfully!'); } //Manage posts public function manage() { return view('manage', ['photos' => auth()->user()->photos()->get()]); } }
User.php 模型代码
<?php 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', ]; /** * 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', ]; //relation with posts public function photos() { return $this->hasMany(Photos::class, 'user_id'); } }
Photos.php 模型代码
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Photos extends Model { use HasFactory; //protected $fillable = ['title', 'name', 'tags', 'body']; public function scopeFilter($query, array $filters) { if($filters['tag'] ?? false) { $query->where('tags', 'like', '%' . request('tag'). '%'); } if($filters['search'] ?? false) { $query->where('title', 'like', '%' . request('search'). '%') ->orWhere('body', 'like', '%' . request('search'). '%') ->orWhere('tags', 'like', '%' . request('search'). '%'); } } //relationship to user public function user() { return $this->belongsTo(User::class, 'user_id'); } }
内容的提问来源于stack exchange,提问作者2Thingz
相关产品推荐
相关产品推荐

