Пакет перевода Laravel Spatie не работает для необработанных запросов и операций объединения

Используя этот пакет Spatie/laravel-translatable, я добился своей локализации с помощью ORM-запросов, таких как (Статья:: все();). Но когда я использую необработанные запросы или операции соединения (запросы к БД), он показывает необработанный json из базы данных.

Статья.php

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;

class Article extends Model
{
    use HasTranslations;

    public $translatable = ['name'];
}

?>

Контроллер

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App;
use App\Article;
use App\User;

class TestController extends Controller
{
    public function index()
    {
        return $result = DB::table('articles')->get();
    }
}
?>

person Manoj R    schedule 23.05.2020    source источник


Ответы (2)


У меня была та же проблема, и мое решение (единственный способ, который я нашел) заключалось в том, чтобы определить метод доступа для перевода атрибута:

public function getNameAttribute($value)
{
    return json_decode($value)->{\App::getLocale()};
}
person xavidejuan    schedule 12.10.2020

Вы получаете их через DB фасад, поэтому вы получаете необработанные данные из базы данных через Построитель запросов.

Чтобы получить переводы, вы должны запросить таблицу articles через модель Article, используя Eloquent ORM вместо этого.

public function index()
{
    return Article::get();
}

Если вы хотите соединить некоторые данные вручную, вы можете:

Article::query()
    ->join('table', 'table.article_id', 'articles.id')
    ->get();
person reppair    schedule 15.05.2021