0

使用这个Spatie/laravel-translatable 包,我通过 ORM 查询(如 (Article::all();))实现了本地化。但是当我使用原始查询或连接操作(数据库查询)时,它会显示来自数据库的原始 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();
    }
}
?>
4

2 回答 2

0

我遇到了同样的问题,我的解决方案(我找到的唯一方法)是定义一个访问器来翻译属性:

public function getNameAttribute($value)
{
    return json_decode($value)->{\App::getLocale()};
}
于 2020-10-12T08:58:09.810 回答
0

您正在通过外观获取它们,因此您可以通过Query BuilderDB从数据库中获取原始数据。

要获得翻译,您应该使用Eloquent ORM通过模型查询articles表。Article

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

如果你想手动加入一些数据,你可以:

Article::query()
    ->join('table', 'table.article_id', 'articles.id')
    ->get();
于 2021-05-15T14:08:24.617 回答