красноречивые отношения с расширенной пользовательской моделью sentinel laravel package - PullRequest
0 голосов
/ 21 октября 2018

У меня есть класс User, который расширяет

<?php

namespace App;

class User extends \Cartalyst\Sentinel\Users\EloquentUser
{
    public function chalets(){
        return $this->hasMany('App\Chalet');
    }
}

, и у меня есть класс шале

class Chalet extends Model
{
    protected $fillable = [
        'name', 'description',
    ];
public function user(){
        return $this->belongsTo('App\User');
    }
}

И у меня есть метод добавления шале пользователем:

public function postCreateChalet(Request $request){
        $chalet = new Chalet([
            'name' => $request->input('name'),
            'description' => $request->input('description')
        ]);
        Sentinel::getUserRepository()->setModel('App\User');
        $user = Sentinel::getUser();
        $user->chalets()->save($chalet);
        return ('chalet has created');
    }

и выдает ошибку:

BadMethodCallException
Call to undefined method Cartalyst\Sentinel\Users\EloquentUser::chalets()

Это правильный способ расширения класса User?

Я искал способы расширения класса User.Я нашел этот вопрос: Наследование моделей в Laravel мне не помогло.

Я использую Laravel 5.7

1 Ответ

0 голосов
/ 24 декабря 2018

Исключение, которое вы получаете, указывает на то, что Sentinel все еще ссылается на стандартную модель Sentinel EloquentUser .Убедитесь, что вы указали вашу модель расширенного пользователя с опубликованными конфигурациями Sentinel.

  1. Запустите следующую команду

    php artisan vendor:publish --provider="Cartalyst\Sentinel\Laravel\SentinelServiceProvider"
    
  2. Откройте опубликованный файл конфигурации по адресу 'config \ cartalyst.sentinel.php'

  3. Измените его из приведенного ниже содержимого: 'users' => [ 'model' => 'Cartalyst\Sentinel\Users\EloquentUser', ], в: 'users' => [ 'model' => 'App\User', ],

Для получения дополнительной информации обратитесь к https://github.com/cartalyst/sentinel/wiki/Extending-Sentinel

Вам не понадобится следующая строка после того, как вы настроите ее через config:

Sentinel::getUserRepository()->setModel('App\User');
...