SpartnerNL / Laravel-Nova-Excel

🚀 Supercharged Excel exports for Laravel Nova Resources
https://docs.laravel-excel.com/nova/1.0/
MIT License
378 stars 73 forks source link

[QUESTION] Export related models #41

Closed simonedelmann closed 5 years ago

simonedelmann commented 5 years ago

Prerequisites

Versions

Description

Actually this is no issue but a question. I have two models: Projects, Members. Each project has many members.

What I want to do? I want to export a list (xlsx) of all members for one project. I've created a Member's action. Then I have to select all members and run my action.

What I want to do instead? I want to run an action on a single project, getting all members. It this possible?

If this is the wrong place for questions like this, I apologize. Thank you for your help!

patrickbrouwers commented 5 years ago

I think it's possible to execute an action on a relation resource. Create a hasMany field for Project -> Members and then if you go to show Project, you should see a list of Members. If you have a Member Excel action, then it should be there to execute.

simonedelmann commented 5 years ago

@patrickbrouwers Thank you! Yes, this is exactly how I'm doing that. I'm sorry, I wasn't clear. For better user experience I would like to skip the select-all step. Let me explain a little more:

If I'm managing a project I (almost always) want to have a list of all active members. I've created a filter for that. So now I have to do lots of things to get the list:

  1. Open the project's detail view.
  2. Choosing the correct filter.
  3. Selecting all (filtered) members
  4. Select Member's Excel action.
  5. Run the action.

What I would prefer:

  1. Open the project's detail view / Selecting project in project index view.
  2. Run action on project.

I'm sorry for the ugly English, I'm not a native speaker. I hope, it gets clear now, what I want to do.

Thank you very much for your help!

patrickbrouwers commented 5 years ago

@simonedelmann the "select-all" step is a Nova thing, so we can't really do a lot about that. Currently Nova only allows us to run actions on selected rows.

simonedelmann commented 5 years ago

OK. :( Anyway thank you very much!

larshanskrause commented 3 years ago

Similar question here (and staying in Simons example): when I use an excel export action on members via the the detail view of projects (members as relation resource on a HasMany-Field), the export ignores all selections and filters I apply to the relation resources before. No matter how many members I select for my export, I always get all related members in my excel file. However, if I run this action on the index view of members it works just fine and respects my selections for the export. Any idea what's going on here, @patrickbrouwers ? I use the WithMapping concern btw. Many thanks!

patrickbrouwers commented 3 years ago

I think it's easier to just call Laravel Excel directly in a Nova action in those cases.

ThisIsMyFavouriteJar commented 3 years ago

I faced the same issue, and I found a way around this. By implementing FromQuery in your action as well, and passing the resource variable to the action you can create a custom query. My result looks something like this:

`class ExportUsers extends DownloadExcel implements FromQuery, WithMapping, WithHeadings { public $onlyOnDetail = true;

public function __construct(Request $request)
{
    $this->project_id = $request->get('resources');
}

public function query()
{
    return Users::where('project_id', $this->project_id);
}

public function map($product): array
{       
        return [
           $user->name,
           $user->project->name
        ];
}

}`

Assuming that there is 1 project with many users.