我尝试使用 Laravel 5.7 和 https://github.com/lazychaser/laravel-nestedset 为嵌套集播种数组包但总是得到:
数组到字符串的转换错误 当函数到达主节点子节点时。 我正在测试 github 上提供的示例,并且无法在播种时使用数组中的嵌套节点创建树。
$node = Category::create([
'name' => 'Foo',
'children' => [
[
'name' => 'Bar',
'children' => [
[ 'name' => 'Baz' ],
],
],
],
]);
任何人都可以建议我如何为数据库表或与 laravel 5.7 一起工作的其他包(如 baum)做种子吗?
谢谢!
最佳答案
我成功地完成了这项工作,所以对于 laravel 5.7 以下是步骤:
创建新的 laravel 项目,在 .env 中设置数据库参数:composer create-project laravel/laravel nestedset
从嵌套集运行: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; }
将 database/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
将 database/seeds/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
- 运行:php artisan db:seed
您应该能够在数据库中看到正确植入的新表。
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
关于laravel 5.7 嵌套集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53594010/