Laravel 从翻译 table 和关系中搜索
Laravel search from translation table and relationship
我有三个表:产品、products_translations 和 products_attributes。
我也在使用 laravel-translatable.
到目前为止,我可以使用我的控制器的以下代码按产品名称进行搜索:
public function search(Request $request) {
$search = $request->input('search');
$products = Product::whereTranslationLike('name', '%' . $search . '%')->with('attributes')->get();
return view('search', compact('products'));
}
此外,我还需要显示关系的结果。在我的例子中,SKU 是 products_attributes 的一部分,它是产品型号的关系。
这是我的产品型号代码:
public function attributes(){
return $this->hasMany(ProductAttribute::class, 'product_id')->orderBy('id', 'asc');
}
当我在我的视图中转储带有此代码的产品时:
{{ dump($product) }}
我可以看到这种关系,但我怎样才能同时使用 SKU 字段进行搜索?
编辑:这是搜索表单的视图部分:
<div class="form-search">
<form action="{{ route('search') }}" method="post">
@csrf
<div class="input-group">
<input type="text" class="form-control" name="search" placeholder="{{ __('t.searchHere') }}..." required>
<span class="input-group-btn">
<button type="submit" class="btn btn-default" aria-label="Submit">
<i class="fas fa-search"></i>
</button>
</span>
</div>
</form>
</div>
试试这样的东西:
public function search(Request $request) {
$search = $request->input('search');
$products = Product::with('attributes')->orWhereHas('attributes', function (Builder $q) use ($search) {
$q->where('YourFieldNameSKU', $search);
})->orWhereTranslationLike('name', '%' . $search . '%')
->get();
return view('search', compact('products'));
}
我有三个表:产品、products_translations 和 products_attributes。 我也在使用 laravel-translatable.
到目前为止,我可以使用我的控制器的以下代码按产品名称进行搜索:
public function search(Request $request) {
$search = $request->input('search');
$products = Product::whereTranslationLike('name', '%' . $search . '%')->with('attributes')->get();
return view('search', compact('products'));
}
此外,我还需要显示关系的结果。在我的例子中,SKU 是 products_attributes 的一部分,它是产品型号的关系。
这是我的产品型号代码:
public function attributes(){
return $this->hasMany(ProductAttribute::class, 'product_id')->orderBy('id', 'asc');
}
当我在我的视图中转储带有此代码的产品时:
{{ dump($product) }}
我可以看到这种关系,但我怎样才能同时使用 SKU 字段进行搜索?
编辑:这是搜索表单的视图部分:
<div class="form-search">
<form action="{{ route('search') }}" method="post">
@csrf
<div class="input-group">
<input type="text" class="form-control" name="search" placeholder="{{ __('t.searchHere') }}..." required>
<span class="input-group-btn">
<button type="submit" class="btn btn-default" aria-label="Submit">
<i class="fas fa-search"></i>
</button>
</span>
</div>
</form>
</div>
试试这样的东西:
public function search(Request $request) {
$search = $request->input('search');
$products = Product::with('attributes')->orWhereHas('attributes', function (Builder $q) use ($search) {
$q->where('YourFieldNameSKU', $search);
})->orWhereTranslationLike('name', '%' . $search . '%')
->get();
return view('search', compact('products'));
}