Как выбрать элементы из таблицы на основе одного значения, если другое значение не существует? (Красноречив / SQL)
У меня есть таблица, где я храню различные блоки текста для моего сайта. В настоящее время я выбираю правильные блоки для каждой страницы с фрагментом страницы и предпочитаемым языком. Я хотел бы выбрать один и тот же блок текста (с тем же заголовком) на резервном языке, когда предпочтительный язык недоступен.
Таблица блоков
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
Требуемый выход
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
В настоящее время я выбираю только блоки с выбранным предпочтительным языком, потому что я не знаю, как подойти к этому с выбором блока «запасного языка», если блок «предпочтительного языка» недоступен. Я мог бы попытаться выполнить два запроса для обоих языков, а затем как-то объединить их и вставить только блоки «запасного языка», если количество заголовков этого блока меньше 1, но это кажется довольно сложным и не очень элегантным?
Для моего приложения я использую eloquent:
$blocks = Block::->where('slug', '=', 'home')
->whereIn('language', $selectedLanguage)
->get();
Как я мог сделать это красноречиво? (или в сыром SQL, в этом отношении?)