Применить некоторые ограничения на вставку отношений модели Laravel - PullRequest
0 голосов
/ 13 октября 2019

Я пытался найти некоторые предложения в сети, но не смог ...

Я хотел бы использовать некоторые ограничения в методе save для отношений в Laravel, я сделаюпример для объяснения

Предположим, у меня есть две модели Post и Comment, как в документации 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.

Я вставляюnew comment с этими инструкциями

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

Я мог бы проверить перед этими строками, но я хотел бы проверить в каком-то другом месте, где обнаруживаются все сохранения, есть ли что-то подобное? Иначе есть ли какой-нибудь "стандартный способ" сделать это?

Ответы [ 2 ]

2 голосов
/ 13 октября 2019

В eloquent Model есть вспомогательные методы, которые именно то, что вам нужно. Поскольку вам нужно выполнить проверку перед вставкой, вы хотите использовать метод static::creating или static::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.
    });
}
0 голосов
/ 13 октября 2019

Вы можете сделать это с помощью count (). Как будто ты можешь попробовать. Где, если в строках менее 10 комментариев, он будет сохранен, в противном случае он вернется к URL.

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

Надеюсь, это поможет

...