static void Main(string[] args)
{
Car c1 = new Car("Toyota", "Model", "1");
Console.WriteLine(c1.engine.engineNumber);
}
public class Car
{
public class Engine
{
public string engineNumber { get; private set; }
internal protected Engine(string engineNumber)
{
this.engineNumber = engineNumber;
}
}
public string name { get; private set; }
public string model { get; private set; }
public Engine engine { get; private set; }
public Car(string name, string model, string engineNumber)
{
this.name = name;
this.model = model;
this.engine = new Engine(engineNumber);
}
}
模型设置了以下关系:
Comment
function replies(){
return $this->hasMany('App\Reply', 'comment_id', 'id')->whereNotNull('replies.status');
}
需要返回答复,即使当前登录用户的状态为null而不是其他用户的状态也是如此。其他人应该只看到已设置状态的回复(除非他们是所有者,在这种情况下,应向他们显示)
我很难把这个逻辑加进去;任何帮助将不胜感激
答案 0 :(得分:1)
您可以查看模型引导范围,在这种情况下,您需要在App\Reply
模型类内添加全局范围:
protected static function boot()
{
parent::boot();
static::addGlobalScope('guest_filter_for_comments', function (Builder $builder) {
return $builder->when(\Auth::check() == false, function ($query) {
return $query->whereNotNull('replies.status');
});
});
}
当您想在需要时禁用过滤器时,只需使用Comment::replies()->withoutGlobalScopes()
即可在未经身份验证时检索未过滤的结果。
顺便说一句,您可以使用相同的逻辑过滤掉与用户相关的注释。当您为经过身份验证的用户调用Comment::all()
时,如果您对Comment
类使用了引导作用域,它将自动过滤掉相关的注释。
https://laravel.com/docs/5.8/eloquent#global-scopes(匿名全局范围) https://laravel.com/docs/5.8/queries#conditional-clauses