#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, потому что в дальнейшем я должен использовать это в ресурсе.