2

这是我的用户模型

    namespace App;
    use Illuminate\Database\Eloquent\Model;
    use Spatie\MediaLibrary\HasMedia\HasMedia;
    use Spatie\MediaLibrary\HasMedia\HasMediaTrait;
    use Spatie\MediaLibrary\File;
    use Illuminate\Notifications\Notifiable;
    use Illuminate\Contracts\Auth\MustVerifyEmail;
    use Illuminate\Foundation\Auth\User as Authenticatable;

    class User extends Authenticatable  implements HasMedia

    {

        use HasMediaTrait;
        use Notifiable;

        protected $fillable = [
            'name', 'email', 'password',
        ];

        protected $hidden = [
            'password', 'remember_token',
        ];

        protected $casts = [
            'email_verified_at' => 'datetime',
        ];

        public function role(){
            return $this->belongsToMany('App/Role');
        }


    }

这是我的用户控制器

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
public function store(Request $request)
    {
        $user=new User;
        $user->name=($request['name']);
        $user->email=($request['email']);
        $password=bcrypt($request['password']);
        $user->password=$password;

        $user_photo=$request['photo'];

        $user->addMediaFromRequest('photo')->toMediaCollection('images');


        $user->save();
        return redirect('/admin');

    }
}

我想使用Spatie媒体库并为每个用户上传一张照片,但我收到与Spatie库相关的错误:

“调用未定义的方法 Illuminate\Foundation\Auth\User::addMediaFromRequest()”。

我已经阅读了一些相关的帖子,但我不明白如何解决这个问题。谢谢你。

4

1 回答 1

2

该库的第 8 版具有此文档。您是否使用了正确的特征?

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;

class YourModel extends Model implements HasMedia
{
    use InteractsWithMedia;
}

编辑:

另一方面,使用HasMediaTrait的是版本 7,所以我假设您使用的是版本 7。我认为这是因为您导入了错误的User类。User用于实现的类HasMedia位于App\User命名空间中。但是您正在User从命名空间导入类Illuminate\Foundation\Auth\User。所以改变它use App\User;,你应该没问题。

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
public function store(Request $request)
    {
        $user=new User;
        $user->name=($request['name']);
        $user->email=($request['email']);
        $password=bcrypt($request['password']);
        $user->password=$password;

        $user_photo=$request['photo'];

        $user->addMediaFromRequest('photo')->toMediaCollection('images');


        $user->save();
        return redirect('/admin');

    }
}

https://docs.spatie.be/laravel-medialibrary/v8/basic-usage/preparing-your-model/

于 2020-05-26T14:47:08.870 回答