Я пытался засеять вложенный набор массивом с Laravel 5.7 и пакетом https://github.com/lazychaser/laravel-nestedset, но всегда получал:
Ошибка преобразования массива в строку, когда функция попадает в дочерние узлы основного узла. Я тестирую на примере, представленном на github, и не могу создать дерево с вложенными узлами из массива при заполнении.
$node = Category::create([
'name' => 'Foo',
'children' => [
[
'name' => 'Bar',
'children' => [
[ 'name' => 'Baz' ],
],
],
],
]);
Может ли кто-нибудь предложить, как я могу заполнить таблицу базы данных или какой-либо другой пакет, например baum, который работает с laravel 5.7?
Спасибо !
Спасибо за комментарий. Да, я выполнил инструкции, и модель соответствует отношениям - я могу даже засеять узлы без дочерних узлов, например: $ node = Category :: create ([['name' => 'Foo',], ['name' => 'Баз',],]); Когда у массива есть «дети», он ломается.
Ошибка довольно ясна: он пытается преобразовать ваш массив в строку. Это означает, что каким-то образом children не рассматривается как узел. Я не думаю, что мы сможем помочь вам больше без остальной части вашего кода.






Мне удалось выполнить эту работу, поэтому для laravel 5.7 вот шаги:
создать новый проект laravel, установить параметры db в .env: composer create-project laravel / laravel nestedset
из вложенного набора run: composer require kalnoy / nestedset
запустить: php artisan make: model NestedSetModel -m
измените код app / NestedSetModel.php на:
namespace App;
use Kalnoy\Nestedset\NodeTrait;
use Illuminate\Database\Eloquent\Model;
class NestedSetModel extends Model
{
use NodeTrait;
}
изменить базу данных / migrations / xxxx_xx_xx_xxxxxx_create_nested_set_models_table.php на:
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateNestedSetModelsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('nested_set_models', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->nestedSet();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('nested_set_models');
}
}
запустить: php artisan make: seeder NestedSetTableSeeder
изменить базу данных / семена / NestedSetTableSeeder.php на
<?php
use Illuminate\Database\Seeder;
class NestedSetTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$node = App\NestedSetModel::create([
'name' => 'Foo',
'children' => [
[
'name' => 'Bar',
'children' => [
['name' => 'Baz'],
],
],
],
]);
}
}
запустить: php artisan migrate
Вы должны увидеть новую таблицу в вашей базе данных с правильным заполнением.
1 Foo 1 6 2018-12-03 16:54:20 2018-12-03 16:54:20
2 Bar 2 5 1 2018-12-03 16:54:20 2018-12-03 16:54:20
3 Baz 3 4 2 2018-12-03 16:54:20 2018-12-03 16:54:20
1) Следили ли вы за Инструкция по установке? 2) Соответствуют ли ваши данные вашим отношениям?