Laravel:如何建立关系访问者

时间:2018-03-22 13:38:57

标签: php laravel laravel-5 orm eloquent

我在模型UserTasksReview模型

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

我正在使用with

加载评论
UserTasks::with('reviews');

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

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加载的关系不关注访问者

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

1 个答案:

答案 0 :(得分:2)

如果您希望 UserTasks 模型中的所有评论都可以尝试此操作

(function( $ ){
    $.fn.deleteRecord = function(url, type) {
        console.log('init', url, type, this, url.call(this, url, type));
        this.click(function(){
            //Confirm that this.each(function(){...}) is not required
            console.log('onClick', url, type, this, url.call(this, url, type))
            if (confirm("Are you sure you wish to delete this "+type+"?")) {
                console.log('onConfirm', url, type, this, url.call(this, url, type))
                var e=this;
                $.ajax({
                    type:'DELETE',
                    url: url.call(this, url, type),
                    dataType: 'json',
                    success: function (rsp){
                        $(e).closest('tr').remove();
                    },
                    error: function (xhr) {
                        alert('Error: '+xhr.responseJSON.message);
                    }
                });
            }
        })
        return this;
    };
})( jQuery );


$("#manual-list img.delete").deleteRecord(function(){'/1.0/manuals/'+$(this).closest('tr').data('id')},'manual');

通过public function getReviewsAttribute($reviews) { $reviews = $this->reviews; foreach ($reviews as $rewiew) { // DO SOMETHING WITH REVIEWS } return $reviews; } 这将获得所有评论,您可以做任何您想做的事情。

  

不要忘记在模型顶部添加命名空间,例如使用Review;(提供命名空间)