首页 > 解决方案 > Laravel 扩展 App\User 并使用 \Auth::user()->mymethod() 调用

问题描述

在我的项目中,我使用默认的 App\User.php 模型,如下所示:

namespace App;

class User extends Authenticatable
{
    public function comments()
    {
        return $this->hasMany('App\Comment', 'user_id', 'id');
    }
}

我创建了一个包“shop”并想扩展 User 模型。例如:

namespace Pixiebox\Shop;

use Illuminate\Database\Eloquent\Model;

class Cart extends Authenticatable
{
    public function posts()
    {
        return $this->belongsToMany('App\Post', 'cart_posts', 'cart_id', 'post_id')->withPivot(['listtype', 'qty']);
    }
}

Pixiebox\Shop\src\Shop\User.php

namespace Pixiebox\Shop;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    public function cart()
    {
        return $this->hasOne('Pixiebox\Shop\Cart', 'user_id', 'id');
    }
}

如果我做

$wishlist = \Auth::user()->cart()->with(['posts' => function($subquery){
    return $subquery->wherePivot('listtype', 'wishlist');
}])->first();

它返回“调用未定义的方法 App\User::cart()”。因为它是一个可选包,所以我不想将方法放在 \App\User.php 中,而是放在它所属的包中。还有其他方法吗?

标签: laravelmodelextend

解决方案


您可以在用于身份验证的模型config/auth.php下设置:providers

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class, // <---
        ],
    ...

推荐阅读