반응형
한 번에 여러 행 시드 5
현재 사용자 테이블을 시드하는 중입니다.두 줄로 이렇게 하면 실패합니다.$users 배열 안에 있는 2개의 배열 대신 단일 배열을 사용하여 가짜 데이터를 생성하면 됩니다.
제가 뭘 잘못하고 있는 거죠, 어떻게 하는 게 좋을까요?
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
$users = [
['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => 'stephan-v@gmail.com', 'password' => bcrypt('carrotz124')],
['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => 'johndoe@gmail.com', 'password' => bcrypt('carrotz1243')],
];
User::create($users);
}
}
모델을 사용해야 하는 경우 루프가 필요합니다.
foreach($users as $user){
User::create($user);
}
그렇지 않으면 그냥 사용할 수 있습니다.DB::table()
그리고.insert
:
DB::table('users')->insert($users);
사실 당신은 또한 전화할 수 있습니다.insert()
모델에서(결과 쿼리가 동일함)
User::insert($users);
다음을 선택하는 경우 참고:insert
method 타임스탬프 및 모델 이벤트와 같은 특수 웅변 기능을 해제합니다.
이것은 라라벨 ^5에 효과가 있습니다.
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// check if table users is empty
if(DB::table('users')->count() == 0){
DB::table('users')->insert([
[
'name' => 'Administrator',
'email' => 'admin@app.com',
'password' => bcrypt('password'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
'name' => 'Agency',
'email' => 'agency@app.com',
'password' => bcrypt('password'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
'name' => 'End',
'email' => 'endcustomer@app.com',
'password' => bcrypt('password'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]
]);
} else { echo "\e[31mTable is not empty, therefore NOT "; }
}
}
create()
레코드를 하나만 저장하는 데 사용됩니다.여러 레코드를 저장하려면 사용해야 합니다.insert()
대신에create()
코드는 다음과 같습니다.
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
$users = [
['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => 'stephan-v@gmail.com', 'password' => bcrypt('carrotz124')],
['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => 'johndoe@gmail.com', 'password' => bcrypt('carrotz1243')],
];
User::insert($users);
}
}
추신.insert()
함수는 타임스탬프를 저장하지 않습니다.created_by
&updated_by
밭
public function run()
{
//
for ($i=0; $i < 1000; $i++) {
DB::table('seo_contents')->insert([
'title' => str_random(10),
'content' => str_random(100),
'created_at'=>date('Y-m-d H:i:s'),
'updated_at'=>date('Y-m-d H:i:s'),
]);
}
}
잘라내기 사용
<?php
use Illuminate\Database\Seeder;
use App\User;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
User::truncate();
$users = [
[
'name' => 'Super Admin',
'email' => 'superadmin@gmail.com',
'password' => '123456',
],
[
'name' => 'Account Admin',
'email' => 'accountadmin@gmail.com',
'password' => '13456',
],
[
'name' => 'Project Admin',
'email' => 'projectadmin@gmail.com',
'password' => '13456',
],
[
'name' => 'Client Admin',
'email' => 'clientadmin@gmail.com',
'password' => '13456',
]
];
User::create($users);
}
}
이 문제로 어려움을 겪고 있는 사람이 있다면, 저는 라라벨 5부터 다음을 사용하고 있으며 라라벨 7+에서 여전히 작동하고 있음을 확인할 수 있습니다.
class UserTableSeeder extends Seeder {
public function run()
{
\DB::table('users')->delete();
\DB::table('users')->insert(array (
0 =>
array (
'id' => 1,
'name' => 'Stephan de Vries',
'username' => 'stephan',
'email' => 'stephan-v@gmail.com',
'password' => bcrypt('carrotz124'
),
1 =>
array (
'id' => 2,
'name' => 'John doe',
'username' => 'johnny',
'email' => 'johndoe@gmail.com',
'password' => bcrypt('carrotz1243'
),
));
}}
저는 시드러가 실행될 때마다 새로운 레코드를 삽입하고 이전 레코드를 업데이트하는 방식으로 진행하고 있습니다.
$languages = [
['id' => 1, 'language_name' => 'English', 'language_code' => 'en'],
['id' => 2, 'language_name' => 'Spanish', 'language_code' => 'es'],
['id' => 3, 'language_name' => 'French', 'language_code' => 'fr'],
['id' => 4, 'language_name' => 'German', 'language_code' => 'de'],
['id' => 5, 'language_name' => 'Swahili', 'language_code' => 'sw']
];
foreach ($languages as $language) {
Language::updateOrCreate(['id' => $language['id']], $language);
}
준비를 위해 임의의 데이터를 삽입하려는 경우 for 루프를 사용할 수 있습니다.
for ($i = 0; $i <= 29; $i++) {
DB::table('userdata')->insert([
'uname' => Str::random(10),
'upassword' => Str::random(10)
]);
DB::table('testtable2')->insert([
'name' => Str::random(10),
'number' => random_int(100, 9999)
]);
}
언급URL : https://stackoverflow.com/questions/28594076/seed-multiple-rows-at-once-laravel-5
반응형
'programing' 카테고리의 다른 글
REST에서 성공적인 DELETE 문에 대한 HTTP 상태 반환 코드는 무엇입니까? (0) | 2023.08.28 |
---|---|
CPU 캐시에 따른 MariaDB 성능 (0) | 2023.08.28 |
jQuery에서 텍스트 상자 값을 설정하는 방법은 무엇입니까? (0) | 2023.08.23 |
NSData에서 Swift의 [Uint8]로 전송 (0) | 2023.08.23 |
jQuery, 확인란 및 .is(": 선택됨") (0) | 2023.08.23 |