añadir múltiples langue usando el paquete Astrotómico / laravel-translatable y laravel
Soy nuevo en laravel y uso Astrotómico / laravel-traductor paquete para la traducción
Tengo problemas cuando quiero añadir dos langue al mismo tiempo.
Tengo name_en,name_ar,discription_an,disriptionar
como campos de entrada.
Tengo este error Creating default object from empty value
así como puedo resolver mi problema
este es el enlace del paquete https://github.com/Astrotomic/laravel-translatable
// start add data
public function store(CategoryRequest $request)
{
// prepare data
$validatedData = array(
'url' => $request->url,
'slug' => $request->slug,
'status' => $request->status,
'last_updated_by' => auth('admin')->user()->id,
'created_by' => auth('admin')->user()->id,
'created' => time(),
);
$translated = array(
'name_en' => $request->name_en,
'name_ar' => $request->name_ar,
'description_en' => $request->description_en,
'description_ar' => $request->description_ar,
);
//start define categoru is sub or main
$request ->sub ==1 ? $validatedData['parent_id'] = $request ->category_id: $validatedData['parent_id']=null;
// start update data
DB::beginTransaction();
$add = Category::create($validatedData);
$id = $add->id;
// strat update category report
$categoryReport = CategoryReport::create(
['status' =>$validatedData['status'],
'category_id' =>$id,
'created_by' =>$validatedData['created_by']
,'last_updated_by' =>$validatedData['last_updated_by']]);
$add->translate('ar')->name = $translated['name_ar'];
$add->translate('en')->name = $translated['name_en'];
$add->translate('ar')->description = $translated['description_ar'];
$add->translate('en')->description =$translated['description_en'];
$add ->save();
DB::commit();
return redirect()->back()->with('success','تم اضافه البيانات بنجاح');
}
Pregunta hecha hace 3 años, 5 meses, 6 días - Por bytebarde61c
2 Respuestas:
-
El error "Creating default object from empty value" se produce cuando estás tratando de acceder a una propiedad de un objeto que no ha sido inicializado correctamente. En tu caso, parece que estás intentando acceder a las traducciones de un objeto de la clase
Category
sin haber inicializado correctamente las traducciones para los idiomas 'en' y 'ar'.Para resolver este problema, asegúrate de inicializar las traducciones para todos los idiomas que necesitas antes de intentar asignarles un valor. Puedes hacerlo de la siguiente manera:
php // Inicializar las traducciones para los idiomas 'en' y 'ar' $add->setTranslation('name', 'en', $translated['name_en']); $add->setTranslation('name', 'ar', $translated['name_ar']); $add->setTranslation('description', 'en', $translated['description_en']); $add->setTranslation('description', 'ar', $translated['description_ar']); $add->save();
De esta manera, estás asignando los valores de las traducciones para los idiomas 'en' y 'ar antes de intentar acceder a ellas. Este enfoque debería resolver el error que estás experimentando.
Respondida el Dec 17, 2020 a las 16:30 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El error
Creating default object from empty value
se produce porque estás intentando acceder a una propiedad de un objeto nulo. En este caso, el objeto nulo es$add->translate('ar')
.Para solucionar este problema, debes asegurarte de que el objeto
$add
no sea nulo antes de acceder a sus propiedades. Puedes hacerlo comprobando si el objeto$add
es nulo antes de llamar atranslate()
.Aquí tienes el código corregido:
php if ($add) { $add->translate('ar')->name = $translated['name_ar']; $add->translate('en')->name = $translated['name_en']; $add->translate('ar')->description = $translated['description_ar']; $add->translate('en')->description =$translated['description_en']; $add ->save(); }
También te recomiendo que utilices el método
firstOrCreate()
en lugar decreate()
para crear el modelo. El métodofirstOrCreate()
creará un nuevo modelo si no existe o devolverá el modelo existente si ya existe. Esto evitará que se produzcan errores si intentas crear un modelo que ya existe.Aquí tienes el código actualizado utilizando el método
firstOrCreate()
:php $add = Category::firstOrCreate($validatedData); if ($add) { $add->translate('ar')->name = $translated['name_ar']; $add->translate('en')->name = $translated['name_en']; $add->translate('ar')->description = $translated['description_ar']; $add->translate('en')->description =$translated['description_en']; $add ->save(); }
Respondida el Dec 17, 2020 a las 16:36 - por Gemini
Votos positivos: 0 | Votos negativos: 0