Laravel расширение приложения \ пользователя и вызов с \ Auth :: user () -> mymethod () - PullRequest
0 голосов
/ 18 апреля 2020

В моем проекте я использую модель App \ User. php по умолчанию, например:

namespace App;

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

Я создал пакет "магазин" и хочу расширить модель 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, а в тот пакет, к которому он принадлежит. Есть ли другой путь?

1 Ответ

2 голосов
/ 18 апреля 2020

Вы можете установить в config/auth.php для providers модель, которая будет использоваться для аутентификации:

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class, // <---
        ],
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...