我正在做一個 laravel 專案。在這里,我有一個表“檔案”(id、title、desc_long、desc_short、檔案(如 .pdf 等)、language_id)和一些樞軸(標簽、角色)
我能夠過濾這些檔案的打開、標簽和語言。
<?php
namespace App\Http\Livewire;
use App\Models\File;
use App\Models\File_Role;
use App\Models\File_Tag;
use Illuminate\Support\Facades\Auth;
use Livewire\Component;
use Illuminate\Support\Facades\DB;
class ShowFile extends Component
{
protected $listeners = ['reloadFile'];
public function mount()
{
$id = Auth::user();
$role_id = $id->role_id;
$file_role = File_Role::where('role_id', '=', $role_id)->pluck('file_id');
$this->files = File::whereIn('id', $file_role)->get();
}
public function render()
{
return view('livewire.show-file');
}
public function reloadFile($tag_id, $query, $langs)
{
$this->files = File::query();
$id = Auth::user();
$role_id = $id->role_id;
$file_role = File_Role::where('role_id', '=', $role_id)->pluck('file_id');
$count = count($file_role);
if($tag_id != 0 && $langs != 0)
{
for ($i = 0; $i < count($file_role); $i ) {
$fileCount = File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id')->count();
$file[] = $fileCount > 0 ? File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id') : null;
}
$this->files = File::whereIn('id', $file)->where('language_id', $langs)->get();
} else if ($tag_id != 0) {
for ($i = 0; $i < count($file_role); $i ) {
$fileCount = File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id')->count();
$file[] = $fileCount > 0 ? File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id') : null;
}
$this->files = File::whereIn('id', $file)->get();
} else if($langs != 0) {
$this->files = File::whereIn('id', $file_role)->where('language_id', $langs)->get();
} else {
$this->files = File::whereIn('id',$file_role)->get();
}
if ($query) {
$this->files = $this->files->where('title', 'like', '%' . $query . '%')->get();
// $this->files = File::whereIn('id', '=', $file_role)->get();
}
}
}
但如您所見,我兩次使用相同的FOR回圈。有沒有辦法像我在上面所做的那樣避免復制粘貼代碼?
uj5u.com熱心網友回復:
如果您真的希望擺脫與第一個非常相似的第二個 for 回圈,則將這兩個 if-elseif 塊合并為一個,兩個 if 塊處理差異
更改塊
if($tag_id != 0 && $langs != 0) {
for ($i = 0; $i < count($file_role); $i ) {
$fileCount = File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id')->count();
$file[] = $fileCount > 0 ? File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id') : null;
}
$this->files = File::whereIn('id', $file)->where('language_id', $langs)->get();
} else if ($tag_id != 0) {
for ($i = 0; $i < count($file_role); $i ) {
$fileCount = File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id')->count();
$file[] = $fileCount > 0 ? File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id') : null;
}
$this->files = File::whereIn('id', $file)->get();
}
至
if (($tag_id != 0 && $langs != 0) || ($tag_id != 0)){
for ($i = 0; $i < count($file_role); $i ) {
$fileCount = File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id')->count();
$file[] = $fileCount > 0 ? File_Tag::where('tag_id', $tag_id)->where('file_id', '=', $file_role[$i])->pluck('file_id') : null;
}
if ($tag_id != 0 && $langs != 0){
$this->files = File::whereIn('id', $file)->where('language_id', $langs)->get();
}
if ($tag_id != 0){
$this->files = File::whereIn('id', $file)->where('language_id', $langs)->get();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/521872.html
標籤:php拉拉维尔
