温馨提示:本文翻译自stackoverflow.com,查看原文请点击:php - In laravel how to pass extra data to mutators and accessors

php - 在Laravel中,如何将额外的数据传递给mutators和accessors

发布于 2020-03-27 11:43:04

我想做的是将每篇文章的注释附加到articles对象,但是问题是我每次需要请求不同数量的注释。

出于某种原因,我需要为此使用mutators,因为有时我会请求50篇文章,而又不想遍历结果并添加注释。

因此,可以执行以下操作以及如何传递额外的参数。

这个模型:

    class Article extends Model
    {

        protected $appends = ['user', 'comments', 'media'];

        public function getCommentsAttribute($data, $maxNumberOfComments = 0)
        {
            // I need to set maxNumberOfComments
            return $this->comments()->paginate($maxNumberOfComments);

        }
    }

这是控制器:

class PostsController extends Controller
{


    public function index()
    {
        //This will automatically append the comments to each article but I
        //have no control over the number of comments
        $posts = Post::user()->paginate(10);
        return $posts;
    }    

}

我不想做的是:

class PostsController extends Controller
{


    public function index()
    {

        $articles = Post::user()->all();

        $number = 5;
        User::find(1)->articles()->map(function(Article $article) {
            $article['comments'] = $article->getCommnets($number);
            return $article;
        });

        return Response::json($articles);
    }    

}

有更好的方法吗?因为我经常使用它,所以接缝不正确。

查看更多

查看更多

提问者
Mustafa Dwekat
被浏览
66
305 2018-12-22 18:43

从Laravel源代码判断,不-不可能将额外的参数传递给该魔术访问器方法。

最简单的解决方案是在您的类中添加另一个额外的方法,该方法可以接受您希望的任何参数-您可以使用该方法代替magic属性。

例如。只需将您的名称重命名getCommentsAttribute()getComments() 并解雇,->getComments()而不是->comments在您的视图中,您就可以开始使用。

发布
问题

分享
好友

手机
浏览

扫码手机浏览