我有一个具有该timestamps()方法的迁移,然后我有一个种子来播种该表.
Schema::create('mytable', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->timestamps();
});
Run Code Online (Sandbox Code Playgroud)
种子看起来像这样:
DB::table('mytable')->insert([
[
'title' => 'My Awesome Title'
]
]);
Run Code Online (Sandbox Code Playgroud)
当它全部运行时使用:
php artisan migrate:refresh --seed
Run Code Online (Sandbox Code Playgroud)
该项目被插入,但值created_at和updated_at都0000-00-00 00:00:00那他们为什么不正确?
这是它创建的列方案:
`created_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
Run Code Online (Sandbox Code Playgroud)
我想要这些方案:
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
Run Code Online (Sandbox Code Playgroud) 我要运行许多迁移和播种器文件,虽然我需要运行所有文件,但目前我需要跳过一个迁移和播种器.
我如何从laravel migration和db seeder命令中跳过一个文件.
我不想从迁移或种子文件夹中删除文件以跳过该文件.
我想在Laravel中为Faker创建一个自定义提供程序(例如,一个用于随机构建名称).
我在哪里将自定义提供程序存储在我的应用程序中以及如何使用它?
最近,我一直试图通过Model Factories和Faker使用Laravel播种来播种我的数据库.
对于简单的模式,让它工作变得轻而易举:).但是,在处理涉及外键和表关系的复杂数据库模式时,我遇到了一些问题:
...就像链接中描述的那样: 模型工厂中的Laravel 5.1外键.
在本主题中,官方文档建议运行如下数据库种子:
public function run()
{
factory(App\User::class, 50)->create()->each(function ($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
Run Code Online (Sandbox Code Playgroud)
...但是这个解决方案存在一个问题:当处理许多数据库表并运行许多种子(它们之间有许多关系)时,使用这种方法创建许多不必要的模型是很常见的.例如,如果我们在上面的示例之前运行了PostsTableSeeder.php,那么所有这些帖子都不会链接到用户,并且永远不会用于测试和开发......
为了找到处理这种情况的方法,我找到了一个适合我的功能解决方案,避免了那些'孤儿'模型的不必要的创建......
我想与大家分享,所以在答案中只是解释:).
我已升级到 Laravel 8,但子目录中的自定义播种器无法正常工作。该文件位于database/seeders/tests/TestSeeder.php.
当我运行该命令时php artisan db:seed --class="TestSeeder",它返回一条错误消息:
Target class [Database\Seeders\TestSeeder] does not exist.
Run Code Online (Sandbox Code Playgroud)
播种机
<?php
namespace Database\Seeders\Tests;
class TestSeeder extends BaseSeeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// codes
}
}
Run Code Online (Sandbox Code Playgroud)
作曲家.json
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/",
"Database\\Seeders\\Tests\\": "database/seeders/tests/"
}
},
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Laravel 5.2中的工厂
我的代码在用户工厂中死掉:
$factory->define(App\User::class, function (Faker\Generator $faker) {
$countries = Countries::all()->pluck('id')->toArray();
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt(str_random(10)),
'grade_id' => $faker->numberBetween(1, 5),
'country_id' => $faker->randomElement($countries),
'city' => $faker->city,
'latitude' => $faker->latitude,
'longitude' => $faker->longitude,
'role_id' => $faker->numberBetween(1, 3),
'verified' => true,
'remember_token' => str_random(10),
'provider' => '',
'provider_id' => str_random(5)
];
});
Run Code Online (Sandbox Code Playgroud)
给我这个错误:
A four digit year could not be found Data missing
Run Code Online (Sandbox Code Playgroud)
我找到了原因,但不知道如何解决它.
当我打电话给工厂时,我称之为:
factory(User::class)->create(['role_id',2]);
Run Code Online (Sandbox Code Playgroud)
如果我这样称呼它:
factory(User::class)->create();
Run Code Online (Sandbox Code Playgroud)
我没有错误.但我真的需要培养不同类型的用户......
任何的想法???
我想传递一个参数来定义我想在数据库播种期间创建多少条记录,而无需手动编辑工厂。
我尝试了不同的变体 php artisan db:seed --class=UsersTableSeeder [using different args here]
我似乎找不到任何文档,所以我不知道在功能上是否存在。这样的东西存在吗?
class UsersTableSeeder extends Seeder
{
public $limit = null;
public function __construct($limit = 1) {
$this->limit = $limit;
}
public function run()
{
echo $this->limit;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试清除生产表中的测试数据。在简单的环境中,我可以编写一个脚本来清理测试数据,但我想知道如何在 Laravel 迁移脚本中执行相同的操作
我有一个生产测试用户,想清除数据库中生成的所有相关记录。在种子文件中,我可以根据电子邮件地址获取学生 ID,然后根据 ID 删除课程和其他信息?。不知道是不是听起来像laravel的做事方式!
学生 ID = 101
他注册了三个课程 他有出勤记录 他有交流记录
现在我想根据他的 emailId 获取学生 id 然后想从课程、出勤、交流表中删除记录,最后从学生表中删除 id
我在做
$sdetail = student::where('email','some@test.com')->first();
echo "you are checking fir: ".$sdetail ->id;
$classes= class::where('studentId',"$sdetail->id")->get();
foreach($classes as $class)
{
echo $class->name; //print only one record I have three rec!
DB::table('courses')->where("id",$class->id)->delete();
}
Run Code Online (Sandbox Code Playgroud)
任何想法解决这个问题!
我使用Laravel框架,最近我被告知有一些名称database seeding会为我们的测试生成一个假数据集.我的理解是否正确?
那太奇怪了.这个怎么运作?它如何知道我在X列数据库中需要哪种类型的数据?它是如何产生的?
另外,我不能制作真实数据集的种子(类似于导出)吗?你知道,我不太懂英语,这就是为什么我无法理解数据库领域种子的概念.
是否可以添加一个新列,将一些数据复制到这个新列并通过 Laravel 迁移更新另一列中的数据?
我有一张类似这样的桌子;
| ID | 物品 | 价格 |
|---|---|---|
| 1 | 项目一 | 100.00 |
| 2 | 项目二 | 200.00 |
现在我需要做的是,
old_price向该表添加一个新列price到新添加的old_price列price5 并更新同一列新表应该看起来像这样;
| ID | 物品 | 价格 | 旧价格 |
|---|---|---|---|
| 1 | 项目一 | 500.00 | 100.00 |
| 2 | 项目二 | 1000.00 | 200.00 |
是否有可能通过迁移或种子或其他东西来实现这一目标?
此更改需要在已经投入生产的应用程序上完成,因此删除并重新创建表对我来说不是一个选择。
此外,old_price创建该列只是为了保留该列当前值的引用price。在此之后它不会更新,如果一切都按照新价格进行,则可能会在以后的更新中删除。所以我不需要使用任何模型事件来更新列。
非常感谢您能在这方面给我的任何帮助。谢谢。
laravel laravel-seeding laravel-migrations laravel-schema-builder