¿Cómo seleccionar elementos de una tabla en función de un valor si no existe otro valor? (elocuente / sql)
Tengo una tabla donde almaceno diferentes bloques de textos para mi sitio web. Actualmente estoy seleccionando los bloques correctos para cada página con el slug de la página y el idioma preferido. Me gustaría seleccionar el mismo bloque de texto (con el mismo título) en el idioma alternativo cuando el idioma preferido no está disponible.
La mesa de bloques
columns:
| id | slug | title | language | content |
entries:
| 1 | home | first | en | the first block |
| 2 | home | first | nl | het eerste blok |
| 3 | home | second | en | the second block |
--> block "second" not available for the 'nl' language
Salida requerida
fallback language = en
selected prefered language = en, output:
| 1 | home | first | en | the first block |
| 3 | home | second | en | the second block |
selected prefered language = nl, output:
| 2 | home | first | nl | het eerste blok |
| 3 | home | second | en | the second block |
--> select this one, because the 'nl' version is not available
Actualmente solo estoy seleccionando los bloques con el idioma preferido seleccionado, porque no sé cómo abordar esto seleccionando el bloque 'idioma de reserva' si el bloque 'idioma preferido' no está disponible. Podría intentar ejecutar dos consultas para ambos idiomas, y luego fusionarlas de alguna manera e insertar solo los bloques de 'idioma de reserva' si el recuento de títulos de este bloque es inferior a 1, pero esto parece bastante elaborado y no muy elegante.
Para mi aplicación estoy usando elocuente:
$blocks = Block::->where('slug', '=', 'home')
->whereIn('language', $selectedLanguage)
->get();
¿Cómo podría hacer esto en forma elocuente? (¿o en SQL sin formato, para el caso?)