У меня есть следующая коллекция:
[{"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? Или мне нужно написать пользовательские функции, циклически повторяя и получая доступ к моделям по очереди, сопоставляя входные данные соответственно каждой модели?