Merhaba json data tipinde olan slug sütunum var. bunu unique yapmak istiyorum veyada create yaparken kontrolünü yapmak istiyorum ama bir türlü yapamadım yardımcı olurmusunuz?
Json data tipinde olan slug için unique
Model de kontrol edebilirsin yada bir validate yazabilirsin
$request->validate([
'slug' => [
'required',
function ($attribute, $value, $fail) {
if (YourModel::whereJsonContains('json_column->slug', $value)->exists()) {
$fail('The slug has already been taken.');
}
},
],
]);
use Illuminate\Database\Eloquent\Model;
use Illuminate\Validation\Rule;
class YourModel extends Model
{
protected $casts = [
'json_column' => 'array',
];
public static function boot()
{
parent::boot();
static::creating(function ($model) {
$slug = $model->json_column['slug'] ?? null;
if (YourModel::whereJsonContains('json_column->slug', $slug)->exists()) {
throw new \Exception("Slug değeri zaten mevcut: {$slug}");
}
});
}
}
enessvg model de create işlemin de yapabilirsin yada slug inputun var ise onun içinde beforeSaveMutating'i çağırarak işlem yapman lazım kayıttan önce kontrol edip uyarı vermek adına
protected function mutateFormDataBeforeCreate(array $data): array
{
$data['user_id'] = auth()->id();
return $data;
}
Create Metodunun için de gelen veriyi de kontrol edersin eğer uyuşmuyor ise this->halt(); ile kesersin işlemi yarıda kaydetmez