Есть вот такая табличка:
spoiler{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sections', function (Blueprint $table) {
$table->uuid('id');
$table->uuid('parent_id')->nullable();
$table->string('caption', 150);
$table->timestamps();
$table->index('parent_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('sections');
}
}
и модель c с автогенерацией id при создании (хотя если не генерировать id в creating, а передавать его атрибутом при создании, ничего не меняется):
spoilerclass Section extends Model
{
public function childSections()
{
return $this->hasMany('App\Section', 'parent_id', 'id');
}
public function parentSection()
{
return $this->belongsTo('App\Section', 'parent_id', 'id');
}
/**
* model life cycle event listeners
*/
public static function boot()
{
parent::boot();
static::creating(function ($instance) {
$instance->attributes['id'] = Str::uuid();
});
}
}
при простом создании через
App\Section::create()
id в базе нормально заполняется, но при использовании "отношений":
$section = App\Section::create(['caption' => '1']);
$section->childSections()->saveMany([
new App\Section(['caption' => '1.1']),
new App\Section(['caption' => '1.2']),
new App\Section(['caption' => '1.3']),
]);
у "детей" parent_id почему-то получается
"0"
(даже не null, а именно строка с нулем). Как правильно сделать так, чтобы parent_id заполнялся нужным значением? (если использовать в качестве id стандартный int с автоинкрементом все работает)