Как проверить наличие столбца в БД и создать запись при использовании отношения

#laravel

#laravel

Вопрос:

Я хочу, чтобы всякий раз, когда создается ModelMeta, он должен проверять, что modelable_id уникален.Означает, что modelable_id не должен повторяться в таблице ModelMetas. Спасибо. Это отношение к новостной модели

 public function validatedOn(){
        return $this->morphMany(ModelMeta::class,'modelable');
    }
  

Это отношение в ModelMeta

 public function modelable(){

        return $this->morphTo();
    }
  

Этот метод используется

 public function addValidationDateToMeta($newsId,$transitionName){
            $news = News::findOrFail($newsId);
            $workflow = Workflow::get($news,'news_status');
            $workflow->apply($news, $transitionName); // applying transition
            $news->save();
            $param = [
                'modelable_id' => $newsId,
                'modelable_type' => News::class,
                'fields'    =>json_encode(['validated_on' =>Carbon::now()]),
            ];
            ModelMeta::create($param);
            return $news;
    }
  

Ответ №1:

Вы могли бы проверить наличие ModelMeta записи с помощью $newsId , прежде чем создавать новую, вот так:

 $alreadyExists = ModelMeta::where('modelable_id', $newsId)->first();
if($alreadyExists){
   //value already exists, return different response or something else
}else{
   //It doens't exist, create it
   ModelMeta::create($param);
}
  

Кроме того, если вы этого еще не сделали, я бы посоветовал вам сделать ваше modelable_id поле уникальным() при миграции:

 $table->integer('modelable_id')->unique();
  

Это также предотвратит ввод любых дублирующихся данных в вашу таблицу.

Комментарии:

1. Спасибо за ответ. Но я хочу сделать это с помощью метода validatedOn, потому что в дальнейшем я должен использовать это в ресурсе.