1.0 2016-11-18 05:27 UTC

This package is not auto-updated.

Last update: 2024-09-29 00:32:05 UTC


README

该包允许递归地导入/导出 eloquent 对象

安装

通过 composer

"required" : {
    ...
    "huuuk/eloquent-export": "^1.0",
    ...
},

添加提供者

'porviders' => [
    // ...
    'AdvancedEloquent\Export\ExportServiceProvider',
    // ...
],

使用

替换您要导出模型的父类

namespace App;

use AdvancedEloquent\Export\Model;
// use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = [
        'name',
        'age',
        'city_id',
    ];
    
    public function city()
    {
          return $this->belongsTo('App\City');
    }
    
    public function posts()
    {
          return $this->hasMany('App\Post');
    }
    
    public function roles()
    {
          return $this->belongsToMany('App\Role');
    }
}

在模型中定义 exportableAttributes 方法,它应该返回您要导出的属性。如果您想导出模型的关系,只需指定返回该关系的函数名。

目前支持以下关系类型

  • BelongsTo
  • HasMany
  • BelongsToMany
class User extends Model
{
   // ...
    protected function exportableAttributes()
    {
          return [
              'name',
              'age',
              'city',
              'posts',
              'roles',
          ];
    }
    // ...
}

别忘了替换这些模型的父类。

namespace App;

use AdvancedEloquent\Export\Model;
// use Illuminate\Database\Eloquent\Model;

class City extends Model
{
    protected $fillable = [
        'name',
        'population',
    ];
    
    protected function exportableAttributes()
    {
          return [
              'name',
              'population',
          ];
    }
}
namespace App;

use AdvancedEloquent\Export\Model;
// use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = [
        'title',
        'published_at',
        'user_id',
    ];
    
    protected function exportableAttributes()
    {
          return [
               'title',
               'published_at',
          ];
    }
}
namespace App;

use AdvancedEloquent\Export\Model;
// use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    protected $fillable = [
        'name',
        'permission',
    ];
    
    protected function exportableAttributes()
    {
          return [
              'name',
              'permission',
          ];
    }
    
    public function users()
    {
          return $this->belongsToMany('App\User');
    }
}

现在您可以像这样导出和导入

$user = User::findOrFail($id);
$json = $user->export();

// ....

$user = User::import($json);

配置

该包包含配置文件、语言文件和视图,要重写它们,只需发布它们即可

# config
php artisan vendor:publish --provider="AdvancedEloquent\Export\ExportServiceProvider" --tag="config"
# view
php artisan vendor:publish --provider="AdvancedEloquent\Export\ExportServiceProvider" --tag="views"
# lang
php artisan vendor:publish --provider="AdvancedEloquent\Export\ExportServiceProvider" --tag="lang"

该包还包含用于导入和导出对象的路由,可以通过以下方式引用

<a href="{{route('export', ['type' => get_class($unit), 'id' => $unit->id])}}" class="btn btn-default">

和导入(使用内置表单)

@include('eloquent-export::import-form',
    [
        // указываются поддерживаемые типы(классы) объектов, например,
        // чтобы в форму импорта структурных подразделений не импортировали
        // другой класс, например  объекты информатизации.
        // если параметр не указан, или пустой , то поддерживаются все типы
        'supportedTypes' => [ App\Unit::class ], 
        // дополнительные атрибуты импортируемого объекта
        // необязательный параметр
        'additionalAttributes' => [ 'parent_id' => $patrentUnit->id ],
        // url на который будет перенаправляться пользователь в случае
        // успешного импорта, если не указан то используется redirect()->back()
        // в обоих случаях при успешном импорте в ссесию записывается
        // переменная success_import = true
        'successRedirect' => route('units.edit', ['id' => $parentId->id]),
    ])

可以在 config/export.php 中禁用内置路由

<?php 
return [
    'builtin_routes' => false,
];

后续版本计划支持

  • HasOne
  • MorphTo
  • MorphMany
  • MorphToMany