为自定义 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 中,直接从视图向模型或控制器请求一些数据的最佳方式是啥?

在 Laravel 中存储网站设置的最佳方式是啥? [关闭]

清洁 Laravel 刀片模板文件的最佳方式是啥?

通过数据报包发送数组的最佳方式是啥?

为自定义 C 库分发 CFFI 包装器

Laravel - 使用大数据优化更新/插入查询的最佳方法是啥?