在Laravel模型关系插入中应用一些约束

时间:2019-10-13 16:21:50

标签: php laravel eloquent eloquent--relationship

我试图在网络上找到一些建议,但我无法...

我想对Laravel中的关系使用save方法中的一些约束,我将举一个例子来解释它

假设我有两个模型PostComment,如Laravel文档中所示:

class Post extends Model
{
    public function comments()
    {
        return $this->hasMany('App\Comment');
    }
}

class Comment extends Model
{
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

现在,我想检查一个新的comment插入,例如,如果该post的注释已经存在十多个,我想避免插入。

我按照以下说明插入新的comment

$comment = new Comment();
$post->comments()->save($comment);

我可以在这些行之前进行检查,但是我想在其他地方进行检查(检测到所有保存),是否存在类似的情况?否则,有什么“标准方法”可以做到吗?

2 个答案:

答案 0 :(得分:2)

雄辩的Model类中有一些您完全需要的辅助方法。由于需要在插入之前进行检查,因此您想使用static::creatingstatic::saving方法。如果要在创建和更新注释时都进行验证,请使用saving。在Comment模型中添加以下内容:

protected static function boot()
{
    parent::boot();

    static::creating(function (Comment $comment) {
        // Do validation on the $comment model.
        // Feel free to make sql queries or do anything you need.
        // Throw an exception if your validation fails.
    });
}

答案 1 :(得分:0)

您可以使用count()来实现。就像beliw一样,您可以尝试。如果行的注释少于10条,它将保存,否则将返回到url。

$comment = new Comment();
If(count ($post->comments) <10){
$post->comments()->save($comment);
} 
else 
return back() ;//dont save return back;

希望这会有所帮助