【问题标题】:Laravel: How to make relationship accessorLaravel:如何制作关系访问器
【发布时间】:2018-08-31 23:32:16
【问题描述】:

我在模型UserTasksReview 模型中有关系

public function reviews()
{
    return $this->hasMany(Review::class,'task_id');
}

我正在使用 with 加载评论

UserTasks::with('reviews');

我想在UserTasks 模型中使用访问器 格式化reviews 关系输出

public function getReviewsAttribute($reviews)
{
    // FILTER AND FORMAT RELATION OUTPUT
    foreach ($reviews as &$review) {
        if ($review['active'] == true) {
            $review['cid'] = bcrypt($this->cid);
            $reviews = [$review];
        }
    }
    return $reviews;
}

不幸的是,这不起作用

使用with加载的关系不注意访问者

我读到这几乎是不可能的,但也许有人知道使用访问器格式化加载关系的方法

【问题讨论】:

  • 为什么不把访问者放在评论中?
  • 请提供有关问题的更多详细信息。
  • @ChiragPatel 我不明白还有什么需要说明的细节
  • 你正在尝试这个 public function getReviewsAttribute($rewiews) { foreach ($rewiews as &$rewiew) { // DO SOMETHING WITH REVIEWS } return $rewiews; } 但 $reviews 在哪里?
  • @aynber 我想过滤reviews关系输出而不修改Reviews模型

标签: php laravel laravel-5 orm eloquent


【解决方案1】:

如果你想要 UserTasks 模型中的所有评论,那么你可以试试这个

public function getReviewsAttribute($reviews)
{
    $reviews = $this->reviews;
    foreach ($reviews as $rewiew) {
        // DO SOMETHING WITH REVIEWS
    }
    return $reviews; 
}

通过$reviews = Review::all();,您将获得所有评论,您可以做任何您想做的事情。

不要忘记在你的模型顶部添加命名空间,比如使用评论;(给你的命名空间)

【讨论】:

  • 您应该在模型中使用 appends 属性和关系。这样做对于加载时间或庞大的数据库可能非常不利
  • @Indra 我知道,但提问者没有定义评论来自哪里,这就是问题所在。
  • 我同意,需要更多信息@Chirag Patel
  • @ChiragPatel 我不需要从Review 模型加载所有记录。我需要从关系中获取它们
  • 所以你必须在你的 UserTasks 模型中使用 $this->reviews。我正在更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多