2016-05-09 3 views
0

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

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

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

Auth::user()->category_name 

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

+0

пожалуйста, объясните более, что мы можем обеспечить лучший ответ, у вас есть ошибка или что? и что именно происходит, и как именно вы хотите, пожалуйста, объясните, пожалуйста, (первый код работает отлично? и второй?если вы хотите показать переменную каждый раз, когда определенное представление открыто, вы можете использовать композиторы представления с кешированием –

+0

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

+0

ОК, когда вы закрываете окна и открываете их обратно, вы все еще вошли в систему или нет? –

ответ

0

попробовать этот

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

EDIT попробовать это

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

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

Auth::user()->category_name 

вы будете иметь имя

это ECo имя на ваш взгляд

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

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

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

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

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

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

Auth::user()->category->name 
+0

Я делаю второй, но с ownTo, и это работает, но дело в том, что я хочу его кэшировать, чтобы не делать sql каждый раз, когда я {{пишу Auth :: user() -> category-> name}} вы возьми? – Jlcanizales

+0

yes добавьте верхний код к вашей модели, он будет делать запрос только каждые 30 минут (вы можете увеличить время), вы можете получить доступ к кэшированному результату, подобному этому {{Auth :: user() -> category_name}} –

+0

Проверьте мой отредактированный ответ (первая часть/код) –

0

Вы можете использовать Красноречивые Accessors

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

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

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

Auth::user()->category_name 
+0

Я использую отношения на laravel через public fu nction category() { return $ this-> hasOne ('category'); }, но он выполняет запрос каждый раз, когда я его вызываю, я хочу сохранить на переменной, чтобы уменьшить количество запросов – Jlcanizales

Смежные вопросы