statamic / eloquent-driver
允许您将Statamic数据存储在数据库中。
Requires
- php: ^8.1
- statamic/cms: ^5.18
Requires (Dev)
- doctrine/dbal: ^3.8
- laravel/pint: ^1.0
- orchestra/testbench: ^8.0 || ^9.0.2
- phpunit/phpunit: ^9.4 || ^10.0 || ^11.0
- dev-master
- v4.14.3
- v4.14.2
- v4.14.1
- v4.14.0
- v4.13.0
- v4.12.3
- v4.12.2
- v4.12.1
- v4.12.0
- v4.11.1
- v4.11.0
- v4.10.0
- v4.9.0
- v4.8.1
- v4.8.0
- v4.7.0
- v4.6.0
- v4.5.0
- v4.4.0
- v4.3.1
- v4.3.0
- v4.2.0
- v4.1.0
- v4.0.0
- 3.x-dev
- v3.4.1
- v3.4.0
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- v3.2.0
- v3.1.3
- v3.1.2
- v3.1.1
- v3.1.0
- v3.0.5
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.10.0
- v2.9.0
- v2.8.0
- v2.7.0
- v2.6.2
- v2.6.1
- v2.6.0
- v2.5.1
- v2.5.0
- v2.4.0
- v2.3.1
- v2.3.0
- v2.2.0
- v2.1.0
- v2.0.0
- v1.2.0
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.3.0
- v0.2.0
- v0.1.2
- v0.1.1
- v0.1.0
This package is auto-updated.
Last update: 2024-09-12 06:01:33 UTC
README
提供将Statamic数据存储在数据库中而不是平面文件的支持。
安装与使用
您可以使用单个命令安装和配置Eloquent Driver。
php please install:eloquent-driver
该命令将安装 statamic/eloquent-driver
包,发布配置文件,然后提示您选择希望移动到数据库的仓库。然后命令将发布相关迁移并运行 php artisan migrate
。
该命令还将为您提供机会,表明您是否希望导入现有数据。
导入平面文件内容
如果您最初选择不导入现有内容,但后来改变主意,您可以通过运行相关命令导入现有内容
- 资产:
php please eloquent:import-assets
- 蓝图和字段集:
php please eloquent:import-blueprints
- 集合:
php please eloquent:import-collections
- 条目:
php please eloquent:import-entries
- 表单:
php please eloquent:import-forms
- 全局:
php please eloquent:import-globals
- 导航:
php please eloquent:import-navs
- 修订:
php please eloquent:import-revisions
- 分类法:
php please eloquent:import-taxonomies
- 站点:
php please eloquent:import-sites
同步资产
如果您的资产由Eloquent Driver驱动,并且您在Statamic之外管理资产(例如直接在文件系统中),则应运行 php please eloquent:sync-assets
命令以将任何缺失的文件添加到数据库中,并删除文件系统中不再存在的文件。
导出到平面文件
如果您希望切换回平面文件,可以使用以下命令将内容从数据库导出
- 资产:
php please eloquent:export-assets
- 蓝图和字段集:
php please eloquent:export-blueprints
- 集合:
php please eloquent:export-collections
- 条目:
php please eloquent:export-entries
- 表单:
php please eloquent:export-forms
- 全局:
php please eloquent:export-globals
- 导航:
php please eloquent:export-navs
- 修订:
php please eloquent:export-revisions
- 分类法:
php please eloquent:export-taxonomies
- 站点:
php please eloquent:export-sites
配置
配置文件位于 config/statamic/eloquent-driver.php
,在安装Eloquent Driver时会自动发布。
对于每个仓库,它允许您确定它们是否应该由平面文件(file
)或Eloquent(eloquent
)驱动。一些仓库还有其他选项,例如覆盖使用的模型。
使用专用列存储数据
注意:此功能目前仅适用于条目。
默认情况下,Eloquent Driver将所有数据存储在一个单一的 data
列中。但是,可以将字段存储在其自己的列中。
-
首先,您需要在配置文件的
entries
部分中启用map_data_to_columns
选项// config/statamic/eloquent-driver.php 'entries' => [ 'driver' => 'file', 'model' => \Statamic\Eloquent\Entries\EntryModel::class, 'entry' => \Statamic\Eloquent\Entries\Entry::class, 'map_data_to_columns' => false, ],
-
创建一个新迁移,向
entries
表添加列php artisan make:migration add_columns_to_entries_table
public function up() { Schema::create('entries', function (Blueprint $table) { $table->string('description')->nullable(); $table->json('featured_images')->nullable(); }); }
您应确保列名与蓝图中的字段处理程序匹配。您还应确保列类型与字段类型匹配。以下是一些常见映射的一般规则
- 文本字段应存储为
string
列。 - 关系字段应存储为
json
列。(除非将max_items
设置为1
,在这种情况下,应存储为string
列。) - 数字字段应存储为
integer
或decimal
列。
- 文本字段应存储为
-
运行迁移
php artisan migrate
-
如果您正在添加
json
或integer
列,您将需要提供自己的Entry
模型来设置适当的类型转换。您可以通过创建一个新的模型来扩展默认的Entry
模型来完成此操作<?php namespace App\Models; class Entry extends \Statamic\Eloquent\Entries\EntryModel { protected $casts = [ // The casts from Statamic's base model... 'date' => 'datetime', 'data' => 'json', 'published' => 'boolean', // Your custom casts... 'featured_images' => 'json', ]; }
如果您使用UUID作为条目ID(默认情况下,如果您将现有条目导入数据库,则使用UUID),则应扩展
Statamic\Eloquent\Entries\UuidEntryModel
类class Entry extends \Statamic\Eloquent\Entries\UuidEntryModel
-
如果您有现有条目,您需要重新保存它们以填充新列。您可以通过将以下代码片段粘贴到
php artisan tinker
来完成此操作\Statamic\Facades\Entry::all()->each->save();
-
就这些了!Statamic现在将读取和写入
entries
表中的新列,而不是data
列。
升级
在更新到Eloquent驱动程序的新版本后,请确保您运行php artisan migrate
以更新您的数据库到最新模式。
问题
我可以在数据库中存储用户吗?
默认情况下,Statamic用户位于您项目中的users
目录。如果您想将它们移动到数据库,请按照此指南操作。
我可以将一些集合存储在数据库中,同时保留其他集合为平面文件吗?
此驱动程序无法实现某些集合平面文件驱动,而其他集合Eloquent驱动的功能。如果您正在寻找这样的功能,您可能想查看Runway插件,它是The Rad Pack的一部分。