私は私のウェブサイトのテキストのさまざまなブロックを格納するテーブルがあります。私は現在、ページのスラッグと好みの言語を使って、各ページの正しいブロックを選択しています。お気に入りの言語が利用できない場合、フォールバック言語で同じテキストブロック(同じタイトル)を選択したいと思います。別の値が存在しない場合、ある値に基づいてテーブルからアイテムを選択する方法はありますか? (雄弁/ 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
「優先言語」ブロックが利用できない場合は、「フォールバック言語」ブロックを選択します。私は両方の言語で2つのクエリを実行しようとする可能性がありますし、何らかの形でそれらをマージし、このブロックのタイトルカウントが1よりも低い場合にのみ 'フォールバック言語'ブロックを挿入しますが、これは非常に精巧で、私のアプリのために
私は雄弁使用しています:
$blocks = Block::->where('slug', '=', 'home')
->whereIn('language', $selectedLanguage)
->get();
私は雄弁でこれを行うことができますどのように? (または生のSQLの場合は?)
私は左の結合でこのようにします。存在するかどうかをチェックしないでください。ブロックが存在しない場合は、ブロックを挿入してください。ありがとう! – FeatherNL