Laravel 翻译

Laravel translations

谁能告诉我如何搜索(使用 livewire)标题为 translatable 的产品? 目前,我正在使用 astrotomic/laravel-translatable 包。 翻译工作正常,我可以静态提取正确的数据,但是当我尝试搜索它时,我遇到了一个问题,因为该包期望在不同的 table 中有一个标题,而不是在主 products 中] table.

这是代码片段。

Translatable 产品字段 table:

Schema::create('product_translations', function (Blueprint $table) {
        $table->id();
        $table->string('locale')->index();
        $table->foreignId('product_id')->constrained()->onDelete('cascade');
        $table->string('title');
        $table->timestamps();
    });

主要产品table:

Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->foreignId('category_id')->constrained()->onDelete('cascade');
        $table->foreignId('user_id')->constrained()->onDelete('cascade');
        $table->timestamps();
    });

第一个table我只需要放可以翻译的数据,在主要产品中table我必须只放不需要的数据被翻译

只是不写创建产品等的整个过程。我会简短地说明它是如何工作的。

当我创建 1 个产品时,它会遍历 config.app 个可用区域并为所有语言创建相同的产品(相同的标题),然后我们可以选择不同的语言并根据它进行翻译。

当我想拉取静态数据时,它看起来像这样:

$products = Product::select('id', 'category_id', 'price', 'created_at', 'image')
        ->whereHas('translations', function ($query) {
            $query->where('locale', app()->getLocale());
        })
        ->with('category:id,name')
        ->orderBy('category_id', 'asc')
        ->get();

现在我想用 livewire 进行实时搜索,但不能像这样提取标题:

$products = Product::select('id', 'category_id', 'price', 'created_at', 'image')
        ->whereHas('translations', function ($query) {
            $query->where('locale', app()->getLocale());
        })
        ->when($this->searchProducts != '', function($query) {
            $query->where('title', 'like', '%'.$this->searchProducts.'%');
        })
        ->with('category:id,name')
        ->orderBy('category_id', 'asc')
        ->get();

因为标题不同table。

有什么想法吗? 谢谢

我没有测试但是可以工作

$products = Product::select('id', 'category_id', 'price', 'created_at', 'image')
        ->whereHas('translations', function ($query) use ($this->searchProducts) {
            if($this->searchProducts) {
                $query->where('locale', app()->getLocale());
                $query->where('title', 'like', '%'.$this->searchProducts.'%');
            }
        })
        ->with('category:id,name')
        ->orderBy('category_id', 'asc')
        ->get();