хранить переменные в пользовательской модели laravel 4

моя пользовательская модель имеет 3 поля: имя пользователя, пароль и category_id, поэтому, когда я авторизуюсь, объект аутентификации будет иметь все 3 переменные, но я хочу добавить имя категории, которая находится в другой модели, и я получаю как:

$category = Category::find(Auth::user()->category_id);
$category_name = $category->name;

поэтому вопрос в том, кого я могу добавить $category_name к объекту Auth::user(), чтобы получать его каждый раз, когда он регистрируется следующим образом:

Auth::user()->category_name

я пытаюсь использовать Session::put("category_name","Category 1"), когда вы входите в систему, но когда я закрываю окна и открываю их последними закрытыми окнами, эта переменная удаляется. я хочу сохранить переменную с момента входа в систему до выхода человека из системы, но если человек вошел в систему и закрыл окно, а затем человек снова открыл страницу, переменная должна быть заполнена


person Jlcanizales    schedule 09.05.2016    source источник
comment
пожалуйста, объясните больше, чтобы мы могли дать лучший ответ, у вас есть ошибка или что? и что «точно происходит» и как именно вы хотите, чтобы это было, объясните, пожалуйста, (первый код работает нормально? а второй? если вы хотите показывать переменную каждый раз, когда открывается определенное представление, вы можете использовать композиторы представлений с кэширование   -  person Achraf Khouadja    schedule 10.05.2016
comment
в основном я хочу сохранить переменную во всех зарегистрированных сеансах, даже если я закрою окна, а затем снова открою их   -  person Jlcanizales    schedule 10.05.2016
comment
хорошо, во-первых, когда вы закрываете окна и снова открываете их, вы все еще вошли в систему или нет?   -  person Achraf Khouadja    schedule 10.05.2016


Ответы (2)


Вы можете использовать Eloquent Accessors

В пользовательской модели

 public function setCategoryNameAttribute()
 {
    $categoryID = $this->category_id;
    $category = Category::find($categoryID);
    return $category->name;
 }

Вы можете получить доступ к названию категории, например

Auth::user()->category_name
person Shalu Singhal    schedule 10.05.2016
comment
я использую отношения в laravel с помощью публичной функции category() { return $this-›hasOne('category'); } но он выполняет запрос каждый раз, когда я его вызываю, я хочу сохранить в переменной, чтобы уменьшить количество запросов - person Jlcanizales; 14.05.2016

попробуй это

в вашей модели пользователя добавьте следующую функцию

ИЗМЕНИТЬ попробуйте это

public function category_name()
{
    return \Cache::remember('category_' . $this->id , 60, function()
    {
        return $this->belongsTo('App\Category')->get();
    });
}

теперь каждый раз, когда вы используете

Auth::user()->category_name

у тебя будет имя

это эко имя в вашем представлении

{{ Auth::user()->category_name }}

ПРИМЕЧАНИЕ: этот код не является лучшим решением, даже если он работает для вас, он открыт для изменений, я просто хочу, чтобы вы поняли, что если вы хотите получить доступ к чему-либо через Auth::user()->getname, вы должны добавить getname function в модели пользователя

и, кстати, можете ли вы показать нам отношение, которое вы установили в своей модели? потому что это облегчило бы

пример, если у вас есть что-то подобное в вашей модели (hasone)

public function category() {
        return $this->hasOne('category');
    }

ты можешь это сделать

Auth::user()->category->name
person Achraf Khouadja    schedule 10.05.2016
comment
я делаю второй, но с ownTo, и он работает, но дело в том, что я хочу его кэшировать, чтобы не выполнять sql каждый раз, когда я {{write Auth::user()-›category-›name}} вы получаете Это? - person Jlcanizales; 14.05.2016
comment
да, добавьте верхний код в свою модель, он будет выполнять запрос каждые 30 минут (вы можете увеличить время), вы можете получить доступ к кэшированному результату следующим образом {{ Auth::user()-›category_name }} - person Achraf Khouadja; 14.05.2016
comment
он показывает мне ошибку: метод отношений должен возвращать объект типа Illuminate\Database\Eloquent\Relations\Relation - person Jlcanizales; 14.05.2016
comment
попробуйте удалить -›get() - person Achraf Khouadja; 14.05.2016
comment
сначала попробуйте без кеша, чтобы мы могли определить проблему, оставьте только это внутри функции и попробуйте, верните $this-›belongsTo('App\Category'); - person Achraf Khouadja; 18.05.2016
comment
я решил с помощью $category = Category::find(Auth::user()-›category_id); $category_name = $категория-›название; Cache::forever('категория',$category_name ); - person Jlcanizales; 19.05.2016