【问题标题】:Laravel Eloquent: get model id from inside getAttribute function?Laravel Eloquent:从 getAttribute 函数内部获取模型 ID?
【发布时间】:2018-09-09 07:19:47
【问题描述】:

我有一个类似下面的模型:

User extends Authenticatable 
{
   protected $appends = array('role');

   public function getRoleAttribute()
   {
      $role = DB::table('acl_user_has_roles')->where('user_id', $this->id)
                ->value('role');
      return $role;
   }
 }

当我尝试像下面这样引用这个 foo 属性时:

$user = User::find(1);
unset($user->id);   // This line causes the problem.
echo $user->role;

我总是得到“null”而不是预期的“Owner”。

我错过了什么?

我在 laravel 5.5.43 中运行这个。

following post 中提到了 getKey() 函数,但它不起作用。

问题实际上是由其他原因引起的,如下面medium post所述。

【问题讨论】:

  • 你使用的是什么版本的 Laravel?
  • 抱歉忘了说:Laravel 5.5.43。
  • 您的代码似乎没有任何问题。这实际上是您拥有的代码还是您为问题简化了代码?
  • 我为这个问题简化了它。在实际代码中,我使用 $this->id 查询另一个我总是得到空结果的表,然后最终将问题缩小到 $this->id 内部 getAttribute() 总是返回 null。 $user 的其他属性似乎在 getAttribute 函数中工作得很好。
  • 您能添加您的实际代码吗?我试过你上面的代码,这似乎工作得很好。

标签: laravel eloquent accessor getattribute


【解决方案1】:

以防万一其他人遇到同样的问题。问题是由代码中的另一行引起的。我在回显之前取消了 $user->id 的设置。

以下中篇文章详细描述了该问题:

Be Careful to Use Laravel Eloquent’s Accessors, Mutators And Events

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2016-08-30
    • 1970-01-01
    • 2021-11-19
    • 2013-12-14
    相关资源
    最近更新 更多