为自定义 Laravel 包提供数据的最佳方式是啥?
Posted
技术标签:
【中文标题】为自定义 Laravel 包提供数据的最佳方式是啥?【英文标题】:What is the best way to provide data for a custom Laravel package?为自定义 Laravel 包提供数据的最佳方式是什么? 【发布时间】:2016-01-30 21:38:45 【问题描述】:我正在为 Laravel 创建一个自定义包,它需要从数据库中获取一些默认数据(尺寸格式、质量、价格范围)才能工作。
数据应该可以被 Laravel 应用程序编辑(例如:价格变化),所以它需要被包共享。因此,我为包需要使用的表创建了一些迁移,但是提供将填充表的默认数据的最佳方法是什么?
【问题讨论】:
【参考方案1】:Laravel 提供播种 http://laravel.com/docs/5.1/seeding 以在您使用迁移时使用。
【讨论】:
谢谢。我知道这一点,但是您有任何方法或示例来说明如何播种大量数据吗?我的两行包含大量用于复杂计算的信息。填充大量数据时使用播种机的最佳方式是什么? 我想我会结合使用您的答案和 fico7489 的答案。我将使用调用播种器的迁移,如this answer 所示,以解决类似的问题。 这取决于您的数据的外观。内联编写记录可能很无聊、令人困惑,并且会产生丑陋的代码。可能您的数据可以以其他格式(csv,json)存储在外部配置文件中,作为应用程序配置的一部分,然后在迁移中读取它以进行播种。 为了将数据与代码分开,我决定从播种机中的单独文件 (csv) 中读取数据。感谢大家的帮助!【参考方案2】:为迁移中的默认值添加种子代码对我有用,例如:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateVocabulariesTable extends Migration
public function up()
Schema::create('vocabularies', function (Blueprint $table)
$table->increments('id');
$table->string('name', 100)->nullable();
$table->dateTime('created_at')->nullable();
$table->dateTime('updated_at')->nullable();
$table->softDeletes();
);
$records = [['id' => 1, 'name' => 'category'], ['id' => 2, 'name' => 'tag']];
foreach ($records as $record)
\App\Models\Vocabulary::create($record);
public function down()
if (Schema::hasTable('vocabularies'))
Schema::drop('vocabularies');
【讨论】:
谢谢。我在想这个,但它似乎有点老套(tbh。我不知道为什么我这么认为),但这可能是最好的解决方案。但是你有什么方法或例子可以说明我如何插入大量数据吗?我是否应该提供一个包含所有数据的额外文件,然后在迁移代码中加载并插入所述文件中的数据? 这是代码组织的问题,所以没有完美的解决方案。 好的。谢谢。我想我会结合使用您的答案和 Carlos Mora 的答案。我将使用调用播种机的迁移,如this answer 所示,以解决类似的问题。以上是关于为自定义 Laravel 包提供数据的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 中,直接从视图向模型或控制器请求一些数据的最佳方式是啥?