我尝试使用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?
谢谢!
答案 0 :(得分:2)
我成功完成了这项工作,因此对于laravel 5.7,请按以下步骤操作:
创建一个新的laravel项目,在.env中设置数据库参数:作曲家create-project laravel / laravel nestedset
从嵌套集合运行:作曲家需要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;
}
将数据库/迁移/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 migration
您应该能够正确查看种子数据库中的新表。
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