advanced-eloquent / export
1.0
2016-11-18 05:27 UTC
Requires
Requires (Dev)
- phpunit/phpunit: ^5.6
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