Показать все данные из таблицы продуктов с переводами, но если для продукта нет перевода, отобразите их на языке по умолчанию - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть две таблицы

продукты:

enter image description here

product_translations:

enter image description here

$locale = 'de';

  \Illuminate\Support\Facades\DB::table('products')
            ->leftJoin('product_translations', 'product_translations.product_id', '=', 'products.id')
            ->where('product_translations.locale' , '=', $locale)
            ->get()

Как мне получить этот результат?

enter image description here

1 Ответ

0 голосов
/ 08 апреля 2020

На основании вашего кода я бы сделал что-то вроде этого:

$locale = 'de';
$default = 'en';

$products = \Illuminate\Support\Facades\DB::table('products')
            ->leftJoin('product_translations as preferred_locale', function($join) use($locale) {
                $join
                    ->on('product_translations.product_id', '=', 'products.id')
                    ->where('locale', $locale);
            })
            ->leftJoin('product_translations as default_locale', function($join) use ($default) {
                $join
                    ->on('product_translations.product_id', '=', 'products.id')
                    ->where('locale', $default);
            })
            //Select all product fields, and both locale fields.
            ->selectRaw('products.*, preferred_locale.name as locale_name, default_locale.name as default_name') 
            ->get();

foreach ($products as $product) {
    //Use coalescing operator(??) to set/select the translation
    $translation = $product->locale_name ?? $product->default_name;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...