okanzen1 Paket bu şekilde nested kaydı desteklemiyor. Meta içerisine basacağınız alanlar sabitse ve MySQL kullanıyorsanız meta içindeki alanlar için virtual generated column oluşturabilirsiniz, bu alanlar üzerinde getTranslation yöntemini kullanabileceğinizi düşünüyorum ama teorik konuşuyorum, denemek lazım. Mesela plan_your_visit isimli jsonb virtual generated column oluşturacaksınız, tanım olarak da meta eklenirken içindeki plan-your-visit alanının extract edilmesini sağlayacaksınız. Böylece tabloda, içinde meta.plan-your-visit değeri olan plan_your_visit isimli sanal bir sütun oluşacak, getTranslation('plan_your_visit', 'en') şeklinde alabileceksiniz. Ekleme ve düzenleme işlemi ise direkt meta alanı üzerinde yapılacak. Bu konuları araştırabilirsiniz. Her ne kadar anlatmış olsam da bu işlem bana basit bir paket için gereksiz ve karmaşık gözüküyor.
Diğer bir seçenek de paketi kullanmayıp modele bir yöntem ekleyerek halletmek. Mesela
public function getMetaData(string $key, ?string $locale = null)
{
$locale ??= app()->getLocale();
$value = $this->getAttribute('meta')[$key] ?? null;
if($value && !is_array($value)) {
return $value;
}
return $value
? ($value[$locale] ?? null)
: null;
}
'meta' => [
'plan-your-visit' => [
'tr' => 'Türkçe veri',
'en' => 'English data',
]
]
$user->getMetaData('plan-your-visit', 'en'); // "English data"
Bu işlem accessor ve mutator kullanılarak da yapılabilir:
https://laravel.com/docs/9.x/eloquent-mutators#accessors-and-mutators