Tengo una tabla de publicaciones que tiene una tabla relacionada donde almaceno diferentes traducciones basadas en post_id ahora, cuando quiero devolver datos de traducción basados en la configuración regional seleccionada por el usuario, dice:
mb_strpos(): Argument #1 ($haystack) must be of type string, Closure givenAquí está mi función
$posts = Post::with('translations', function($q) { $q->where('translate_code', app()->getLocale()); })->get(); dd($posts); // returning error abovePero si hago esto
$posts = Post::with('translations')->get(); dd($posts);Obtendré los siguientes resultados
Aquí están los detalles de los datos de traducción:
Mi pregunta es:
¿Cómo puedo devolver la única traducción que tiene solo el nombre de configuración regional actual?
Si usa la devolución de llamada, use una matriz de relaciones como la siguiente. La versión anterior de laravel estaba funcionando, la cual mencionaste, pero la última versión necesita una matriz de relaciones cuando se usa la devolución de llamada.
$posts = Post::with(['translations'=> function($q) { $q->where('translate_code', app()->getLocale()); }])->get();el uso de la carga ansiosa condicional debería ser así:
$posts = Post::with(['translations'=> function($q) { $q->where('translate_code', app()->getLocale()); }])->get();mientras que el nombre de la relación es la clave, una forma más cercana de obtener datos debería ser el valor de la matriz asociativa para la declaración 'con'.
Puede consultar su relación usando whereHas() .
Documentos: Laravel Documentos Relaciones
Por ejemplo:
$posts = Post::whereHas('translations', function ($query) { $query->where('translate_code', 'en'); })->get(); Tal vez intente poner app()->getLocale() en una variable primero. (Después de probar esto en Tinker, parece que devuelve una cadena, por lo que pasarla por referencia podría ayudar).