我对Laravel和数据库非常陌生,我试图了解如何将数据插入到我的数据库中。请耐心等待,你的问题听起来很虚伪。
我在迁移中创建了一个表。表格示例:
public function up(){
Schema::create('job-urls', function (Blueprint $table) {
$table->increments('id');
$table->foreign('job_id')->references('id')->on('jobs');
$table->string('url')->index();
$table->string('hash');
$table->timestamp('created_at')->nullable();
$table->timestamp('updated_at')->nullable();
我有两个对应于字段url
和hash
的csv文件,我想插入它们。我在迁移中创建了一个名为populate_jobs_url
class PopulateJoburls extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(){
$fileurls = fopen('../data/urls.csv', 'r');
$filehash = fopen('../data/urls_hash.csv', 'r');
while (($row = fgetcsv($fileurls, 0, ',')) !=FALSE){
DB::table('joburls')->insert(
array(
'url' => $row,
)
);
}
while (($row = fgetcsv($filehash, 0, ',')) !=FALSE){
DB::table('joburls')->insert(
array(
'hash' => $row,
)
);
}
}
你能帮助我理解我是如何检查桌子是否正确填充的吗?这种方法是否正确?我怎么能在我的数据库中插入数据?不幸的是,Web上的所有示例都涉及使用表单手动插入数据。
由于
答案 0 :(得分:0)
在迁移文件中播种表不是最佳做法。您可以利用Seeders,这是用测试或实际数据填充表格的正确方法。
首先,使用php artisan make:seeder PopulateJobUrls
命令创建一个播种器文件。然后你可以这样安排你的播种机:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class PopulateJobUrls extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$fileurls = fopen('../data/urls.csv', 'r');
$filehash = fopen('../data/urls_hash.csv', 'r');
// Rest of your seeding logic...
}
}
您应该在run方法中引用database/seeds/DatabaseSeeder.php
的播种机:
$this->call(PopulateJobUrls::class);
运行php artisan db:seed
或者如果您想更具体一点,php artisan db:seed --class=PopulateJobUrls
并且您最好使用正确填充的数据!