Como selecionar itens de uma tabela com base em um valor, se outro valor não existir? (eloquente / sql)
Eu tenho uma tabela onde armazeno diferentes blocos de textos para o meu site. No momento, estou selecionando os blocos corretos para cada página com o slug da página e o idioma preferido. Gostaria de selecionar o mesmo bloco de texto (com o mesmo título) no idioma de fallback quando o idioma preferido não estiver disponível.
A tabela de blocos
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
Saída necessária
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
Atualmente, estou apenas selecionando os blocos com o idioma preferido selecionado, porque não sei como abordar isso selecionando o bloco 'idioma de fallback' se o bloco 'idioma preferido' não estiver disponível. Eu poderia tentar executar duas consultas para os dois idiomas e mesclá-las de alguma forma e apenas inserir os blocos 'idioma de fallback' se a contagem de títulos desse bloco for menor que 1, mas isso parece bastante elaborado e não é muito elegante?
Para meu aplicativo, estou usando eloquente:
$blocks = Block::->where('slug', '=', 'home')
->whereIn('language', $selectedLanguage)
->get();
Como eu poderia fazer isso de forma eloquente? (ou em SQL bruto, para esse assunto?)