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