【问题标题】:store variables on user model laravel 4在用户模型 laravel 4 上存储变量
【发布时间】:2016-09-04 17:02:13
【问题描述】:

我的用户模型有 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"),但是当我关闭窗口并在最后关闭的窗口打开它时,它会删除该变量。 我想存储该人登录后的变量,直到该人注销,但如果该人已登录并关闭窗口,然后该人重新打开页面,则必须填写该变量

【问题讨论】:

  • 请解释更多,以便我们提供最佳答案,您有错误还是什么?以及“究竟发生了什么”以及您希望它如何,请进一步解释,(第一个代码工作正常?第二个?如果您想在每次打开某个视图时显示变量,您可以使用视图作曲家缓存
  • 基本上我想在所有记录的会话中存储一个变量,即使我关闭窗口然后我再次打开它
  • 先确定,当你关闭窗口再打开时,你是否还在登录?

标签: php laravel session laravel-4 laravel-4.2


【解决方案1】:

试试这个

在您的用户模型中添加以下函数

编辑试试这个

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 }}

注意:即使对您有用,此代码也不是最佳解决方案,这是可以更改的,我只是想让您明白,如果您想通过 @987654324 访问某些内容@你必须在用户模型中添加getname function

顺便问一下,你能告诉我们你在模型中设置的关系吗?因为这样会更容易

一个例子 如果你的模型中有这样的东西(hasone)

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

你可以这样做

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

【讨论】:

  • 我做了第二个,但使用了 belongsTo 并且它可以工作,但问题是我想缓存它,而不是每次我都执行 sql {{write Auth::user()->category ->name}} 你明白了吗?
  • 是的,将顶部代码添加到您的模型中,它只会每 30 分钟执行一次查询(您可以增加时间)您可以像这样访问缓存的结果 {{ Auth::user( )->category_name }}
  • 它显示错误:关系方法必须返回 Illuminate\Database\Eloquent\Relations\Relation 类型的对象
  • 尝试删除 ->get()
  • 先尝试不使用缓存,这样我们才能发现问题,只在函数中保留这个并尝试,返回 $this->belongsTo('App\Category');
【解决方案2】:

你可以使用 Eloquent 访问器

在用户模型中

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

您可以访问类别名称,如

Auth::user()->category_name

【讨论】:

  • 我通过 public function category() { return $this->hasOne('category'); 使用 laravel 上的关系。但每次我调用它时它都会进行查询,我想存储在一个变量中以减少查询次数
猜你喜欢
  • 2011-10-15
  • 2013-12-17
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 2017-04-23
  • 2016-05-08
  • 1970-01-01
  • 2013-09-25
相关资源
最近更新 更多