搜索

首页  >  问答  >  正文

使用laravel-translatable获取特定语言的Laravel文章。

<p>我正在使用laravel-translatable库开发一个多语言的网站系统。在这个Web应用程序中,没有前端,数据是通过API进行读写。我面临的问题是无法在一个或多个语言中获取数据库中存储的所有记录,例如从'blog'表中获取标题为英语和法语的所有记录。这个库的文档没有明确提到这一点,而我也无法通过我尝试的代码解决这个问题。以下是我尝试的代码示例,但都没有解决我的问题:</p> <pre class="brush:php;toolbar:false;">Route::get('/', function () { return response()->json( DB::table('blogs') ->get() ->filter(function ($blog) { return $blog->getTranslations('title', ['en']); }) ); }); Route::get('/', function () { return response()->json( DB::table('blogs') ->get() ->filter(function ($blog) { return collect(json_decode($blog->title))->has('en'); }) ); }); Route::get('/', function () { return response()->json(Blog::titleEqualsEn()->get(), 200); });<span style="font-family:'sans serif, tahoma, verdana, helvetica';"><span style="white-space:nowrap;"> </span></span></pre> <p><br /></p>
P粉598140294P粉598140294560 天前640

全部回复(1)我来回复

  • P粉541565322

    P粉5415653222023-08-01 10:27:03

    你可以通过创建一个中间件来处理每个请求的语言环境,就像这个例子一样:

    public function handle(Request $request, Closure $next)
        {
            $locales = ['en', 'fr'];
    
            if($request->has('lang') && in_array($request->input('lang'), $locales)){
                App::setLocale($request->input('lang'));
            }
            return $next($request);
        }

    之后,你可以很容易地将你想要的语言环境作为查询字符串传递给你的端点。

    GET http://localhost:8000/api/users?lang=en

    此外,请确保使用Eloquent模型而不是查询构建器。

    回复
    0
  • 取消回复