【问题标题】:How to insert a static field in request array (Laravel 5.7)如何在请求数组中插入静态字段(Laravel 5.7)
【发布时间】:2019-07-18 16:22:42
【问题描述】:

我对商店功能的一些小功能有疑问,我似乎在互联网上找不到任何适合我的正确答案。

我想在数组请求中添加静态数据,以便在发送数据时,数据透视表中检查的字段将自动填充一些整数。

我有以下表格:

Schema::create('mounter_evaluations', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('project_id')->index()->unsigned()->nullable();
    $table->text('mentions')->nullable();
    $table->softDeletes();
    $table->timestamps();
});  

Schema::create('mounter_procedures', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('mounter_norm_id')->index()->unsigned()->nullable();
    $table->string('detail');
    $table->softDeletes();
    $table->timestamps();
});

Schema::create('mounter_procedures_checks', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('mounter_evaluation_id')->unsinged()->nullable()->index();
    $table->integer('mounter_procedure_id')->unsinged()->nullable()->index();
    $table->integer('checked')->unsinged()->nullable();
    $table->timestamps();
});

以下型号:

public function mounterevaluation() {
    return $this->belongsToMany(
        'App\MounterEvaluation',
        'mounter_procedures_checks',
        'mounter_evaluation_id',
        'mounter_procedure_id'
    )->withPivot(['checked']);
}

public function mounterprocedures() {
    return $this->belongsToMany(
        'App\MounterProcedures',
        'mounter_procedures_checks',
        'mounter_evaluation_id',
        'mounter_procedure_id'
    )->withPivot(['checked']);
}

这是我的商店功能:

public function store(Request $request, $idProiect) {
    $evaluation = MounterEvaluation::where('project_id', $idProiect)->first();
    if (!$evaluation) {
        $evaluation = new MounterEvaluation();
        $evaluation->project_id = $idProiect;
    }
    $evaluation->mentions = $request->mentions;
    $evaluation->save();

    // $request->request->add(['checked' => 1]);
    // $evaluation->mounterprocedures()->sync($request->procedures);

    // $evaluation->mounterprocedures()->sync($request->all() + ['checked' => 1]);
    $evaluation->mounterprocedures()->sync($request->procedures);
    // $request->request->add(['checked' => 1]);
    $evaluation->mounterprocedures()->request->add(['checked' => 1]);
    return response()->json($evaluation, 201);
}

每次有人检查评估表中的某些文件时,该检查将存储在数据透视表中。

【问题讨论】:

标签: php laravel laravel-5 laravel-5.7


【解决方案1】:

将其放入$request 数组中,就像您将值放入任何其他数组中一样:

$request['new_key1'] = 'new value 1';
$request['new_key2'] = 'new value 2';

我知道它是如何工作的,在你的控制器中你有 Request 实例,作为参数传递,然后你可以像这样正常添加值:

namespace App\Http\Controllers;
use Illuminate\Http\Request;

public function example(Request $request)
{
     $request['new_key1'] = 'new value 1';
     $request['new_key2'] = 'new value 2';
     dd($request->input('new_key1'));//new value 1
}

在您的情况下,如果 $request->procedures 是一个数组,那么您可以这样做:

$request->procedures = $request->procedures->toArray();
$request->procedures['checked'] = 1;
$evaluation->mounterprocedures()->sync($request->procedures);

希望对你有帮助

【讨论】:

  • 您好,感谢您的回复。但不幸的是,这对我不起作用:(我不确定我做错了什么。 // $request['checked'] = 0; // $evaluation->$request['checked'] = 0; $request->request->add(['checked' => 0]); //添加请求还是不行,间接修改重载属性
  • 编辑答案,再试一次
  • 再次感谢您的帮助!但奇怪的是我仍然得到这个错误......重载属性 Illuminate\Http\Request::$procedures 的间接修改没有效果
  • 没关系,我们会弄清楚,更新答案,在前面加上$request->procedures = $request->procedures->toArray(); 行试试,然后告诉我你遇到了什么错误
  • 感谢您的宝贵时间!当我这样尝试时,我得到了错误:调用数组上的成员函数 toArray() 我已经删除了数组并且它起作用了。但它并没有按照它应该的方式工作。检查的字段保持为空,并且检查的值从表中移至 mounter_procedure_id。在我输入邮递员的 json 中,我使用它是这样的:链接:/mounterevaluation/1 提及 => 'something' 程序 => '2'
猜你喜欢
  • 2019-01-14
  • 2018-12-20
  • 1970-01-01
  • 2019-05-31
  • 2021-05-08
  • 2021-08-02
  • 1970-01-01
  • 2019-03-18
  • 2019-05-18
相关资源
最近更新 更多