Home > Blockchain >  Laravel eloquent retrieve subfolders from folders in multi select
Laravel eloquent retrieve subfolders from folders in multi select

Time:09-27

So i am working on a laravel project but I am stuck in this part:

I have a database with 2 Tables: 'folder' and 'subfolder'

i have a working crud for both of them where i also included hasMany and belongsTo. This is so i can see the folder name in the subfolder view.

Now i want to make a button in the folder view so i can view all the subfolders that have the same 'folder_id' as 'id' on folder. i already have a button that redirects with a 'id' value, but i still see all the subfolders and not the subfolders where folder_id = id.

Folder table:

Schema::create('folder', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments("id")->unsigned(false);
            $table->string('name');
            $table->timestamps();
        });

subfolder table:

   Schema::create('subfolder', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments("id")->unsigned(false);
            $table->string('name');
            $table->unsignedInteger('folder_id')->value(11)->unsigned(false)->nullable();
            $table->foreign('folder_id')->references('id')->on('folder');
            $table->timestamps();
        });

folder.index:

 @foreach($folders as $folder)
        <tr>
            <td>{{$folder->id}}</td>
            <td>{{$folder->name}} </td>
            <td>
                <a href="{{ route('admin.subfolder.index',$folder->id)}}" >View {{$folder->name}}</a>
            </td>

            <td>
                <a href="{{ route('admin.folder.edit',$folder->id)}}" >Edit</a>
            </td>
            <td>
                <form action="{{ route('admin.folder.destroy', $folder->id)}}" method="post">
                  @csrf
                  @method('DELETE')
                  <button  type="submit">Delete</button>
                </form>
            </td>
        </tr>
        @endforeach

subfolder controller index:

 $subfolders = Subfolder::with('folder')->get();
        $folders = Folder::all();

        return view('admin.subfolder.index', compact('subfolders', 'folders'));

If i need to add any information i will gladly do so!

CodePudding user response:

Change the function in your Subfolder controller:

public function index($folder_id)
{
    $subfolders = Subfolder::where('folder_id', $folder_id)->with('folder')->get();
    $folders = Folder::all();

    return view('admin.subfolder.index', compact('subfolders', 'folders'));
}

CodePudding user response:

For getting only the specific subfolders from a folderId you can apply a whereHas condition on the eloquent:

$folders = Subfolder::whereHas('folder', function (Builder $query) {
    $query->where('id', $folderId);
})->get();

this will return only those subfolders who have matching folder ID. I hope this will resolve your issue.

  • Related