Массовая вставка в коллекцию Eloquent - Lumen / Laravel - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть следующая коллекция:

[{"Internal_key":"TESTKEY_1","extensiontable_itc":{"description_itc":"EXTENSION_ITC_1"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_1"}},{"Internal_key":"TESTKEY_2","extensiontable_itc":{"description_itc":"EXTENSION_ITC_2"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_2"}},{"Internal_key":"TESTKEY_3","extensiontable_itc":{"description_itc":"EXTENSION_ITC_3"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_3"}},{"Internal_key":"TESTKEY_4","extensiontable_itc":{"description_itc":"EXTENSION_ITC_4"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_4"}},{"Internal_key":"TESTKEY_5","extensiontable_itc":{"description_itc":"EXTENSION_ITC_5"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_5"}}]

Он был получен следующим образом:

$collectionForInsertion = coretable::with($permittedTables)->get();

Coretable имеет 1-1 отношения со связанными таблицами. Все модели этих связанных таблиц в основном выглядят так:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class extensiontable_itc extends Model
{


    /**
   * The table associated with the model.
   *
   * @var string
   */
   protected $table = 'extensiontable_itc';

  /**
   * The attributes that are mass assignable.
   *
   * @var array
   */

   protected $hidden = [
     'id_extensiontable_itc',
     'coretable_id',
     'created_at',
     'updated_at'
   ];


  protected $fillable = [
    'description_itc'
  ];



  /**
   * Many-To-Many relationship with User-Model.
   */
  public function coretable()
  {
    return $this->hasOne('App\coretable', 'coretable_id');
  }
}

Их миграции выглядят так:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateExtensiontableItc extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('extensiontable_itc', function (Blueprint $table) {
            $table->bigIncrements('id_extensiontable_itc');
            $table->bigInteger('coretable_id')->unsigned()->unique()->nullable(false);
            $table->foreign('coretable_id', 'fk_extensiontable_itc_coretable')->references('id_coretable')->on('coretable');
            $table->string('description_itc')->nullable(false);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('extensiontable_itc');
    }
}

Теперь я хотел бы знать, действительно ли это ВОЗМОЖНО, чтобы сделать следующая вставка с какой-то необычной, встроенной красноречивой функциональностью ORM или нет:

$collectionForInsertion->push($inputArray);
$collectionForInsertion->save();

В настоящее время это не работает. Метод save() не существует для сбора, по крайней мере, так говорит сообщение об ошибке:

 (1/1) BadMethodCallException

Method Illuminate\Database\Eloquent\Collection::save does not exist.

Кроме того, при использовании следующего тестового ввода:

{
"Internal_key" : "TESTKEY_6",
"description_itc" : "EXTENSION_ITC_6",
"description_sysops" : "EXTENSION_SYSOPS_6"
}

нажатие на $collectionForInsertion следующим образом:

$collectionForInsertion->push($inputArray);

приводит к следующему:

[{"Internal_key":"TESTKEY_1","extensiontable_itc":{"description_itc":"EXTENSION_ITC_1"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_1"}},{"Internal_key":"TESTKEY_2","extensiontable_itc":{"description_itc":"EXTENSION_ITC_2"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_2"}},{"Internal_key":"TESTKEY_3","extensiontable_itc":{"description_itc":"EXTENSION_ITC_3"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_3"}},{"Internal_key":"TESTKEY_4","extensiontable_itc":{"description_itc":"EXTENSION_ITC_4"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_4"}},{"Internal_key":"TESTKEY_5","extensiontable_itc":{"description_itc":"EXTENSION_ITC_5"},"extensiontable_sysops":{"description_sysops":"EXTENSION_SYSOPS_5"}},{"Internal_key":"TESTKEY_6","description_itc":"EXTENSION_ITC_6","description_sysops":"EXTENSION_SYSOPS_6"}]

Данные не добавляются в виде вложенных существующих строк данных. Следовательно, сохранение этой коллекции в модель / БД, вероятно, не сработает.

Однако, есть ли способ сделать это sh легко с помощью встроенной функциональности laravel? Или мне нужно написать пользовательские функции, циклически повторяя и получая доступ к моделям по очереди, сопоставляя входные данные соответственно каждой модели?

...