在Nova Action字段上运行where()-> get()

时间:2019-06-11 01:39:41

标签: php laravel crud laravel-nova

我试图提供一个Select列表,其中仅包含通过数据透视表与该模型相关的记录。

在为客户构建时间跟踪器/预算软件时,我有两个正在使用的模型称为预算和项目,这些模型与数据透视表结合在一起。 (因此budgetsprojectsbudget_project

我试图在Budget字段上显示与选定的Budget相关的所有项目(调用操作时来自Select资源)。我不知道如何将model->id传递到fields函数中。然后,我将运行一些代码来分析与给定Projects关联的Budget,并创建一堆跨越日期范围和其他关系的记录。

请帮助!

我正在寻找这样的东西...

class CreateSchedule extends Action
{
    use InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Perform the action on the given models.
     *
     * @param  \Laravel\Nova\Fields\ActionFields  $fields
     * @param  \Illuminate\Support\Collection  $models
     * @return mixed
     */
    public function handle(ActionFields $fields, Collection $models)
    {
        return Action::message('all good');
    }

    /**
     * Get the fields available on the action.
     *
     * @return array
     */
    public function fields()
    {
        $budgetProject = BudgetProject::where('budget_id',$this->id)->get();

        foreach($budgetProject as $bp){
            $projectArray[$bp->project_id] = $bp->project->name;
        }

        return [
            Select::make('Project','project_id')->options($projectArray),
        ];
    }
}

3 个答案:

答案 0 :(得分:2)

对我来说,它像这样

在Resource类中传递ID

 (new LogsDiffAction($this->id))

在Action类中创建一个构造函数以接收此参数

 protected $model;

public function __construct($model)
{
    $this->model = $model;
}

在您可以执行的字段中

if ($this->model) {
        $entity = Activity::find($this->model);
        $model = json_decode($entity->properties, true);
        $partial = view('admin.nova.log-diff-partial', ['model' => $model])->toHtml();

        return [
            Heading::make($partial)->asHtml(),
        ];
    }

答案 1 :(得分:1)

sudo apt-get --only-upgrade install odoo

答案 2 :(得分:0)

当我在拥有 TemplateCampaign 模型的时事通讯部分工作时,我遇到了类似的问题

如果你想获得记录的数据,你可以通过这样做来添加你的模型 注意 onlyOneTabeRow 函数是一个内联动作,必须传递模型

public function actions(Request $request)
{
    return [
        (new CreateCampaign($this))
            ->onlyOnTableRow()
    ];
}

现在您可以在 CreateCampaign 行动承包商中接收它们

public function __construct($model)
{
    $this->template = $model;
}

无需向数据库发出任何请求,您就可以像这样获取当前记录数据

public function fields()
{
    return [
        Text::make('Name', 'name')
            ->default(function ($request) {
                return $this->template->name;
            })
            ->rules('required'),
        Text::make('Subject', 'subject')
            ->default(function ($request) {
                return $this->template->subject;
            })->rules('required'),
        Textarea::make('Content', 'content')
            ->default(function ($request) {
                return $this->template->content;
            })->rules('required')->showOnIndex(),
        Hidden::make('Template Id', 'template_id')
            ->default(function ($request) {
                return $this->template->id;
            })
    ];
}

这是我点击第一条记录中的内联操作 Create Campaign 后我想要的照片,我得到一个表单,其中包含我想在操作表单中显示的特定记录

laravel nova inline action