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();
谁能告诉我如何搜索(使用 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();