Я занимаюсь разработкой приложения с использованием Laravel, Eloquent как ORM, phpunit для модульного тестирования.Я хочу сохранить более одной записи в базе данных, я пытался за цикл.Но цикл for сохраняет только одну запись, даже цикл выполняется только один раз.Цикл работает нормально для другого кода, кроме фрагмента сохранения.Ниже приведены мои коды:
Класс модели:
class Post extends Model
{
protected $table = "posts";
protected $fillable = [
'id',
'user_id',
'title',
'description',
'total_needed',
'total_collected',
'total_expanse',
'start_date',
'end_date',
'active',
'updated_at',
'created_at',
];
}
Код модульного тестирования
class RepoPost extends TestCase
{
public function testMain()
{
echo "\n >----------- Test Name : " . get_class($this);
echo "\n >----------- Test Main : ---------> \n";
$this->postSave();
} //test:main
public function postSave()
{
$postDummy = new Post();
// $postDummy->id ='';
$postDummy->user_id = 'Tst';
$postDummy->title = 'Post Save Repo Test.';
$postDummy->description = 'UnitTesting of URLs';
$postDummy->total_needed = '2000';
$postDummy->total_collected = '1000';
$postDummy->total_expanse = '500';
$postDummy->start_date = '22-09-2019';
$postDummy->end_date = '22-10-2019';
$postDummy->active = '1';
$postDummy->updated_at = '2019-09-22';
$postDummy->created_at = '2019-09-23';
//loop 1
for ($x = 0; $x < 10; $x++) {
echo '\n----PostSave----\n' . $x;
$postRepoSave = $this->getRepoPostImpl();
dd($postRepoSave->save2($postDummy));
}
//loop 2
for ($x = 0; $x <= 10; $x++) {
echo "\n The number is:" . $x;
}
}
public function getRepoPostImpl()
{
return new Post_Repo_Impl;
}
}
Петля 1 - этосохраняя только одни данные, цикл также выполняется один раз.Петля 2 работает хорошо, печатает 10 строк.
Если я копирую один и тот же метод несколько раз в "testMain ()", он сохраняет более одной записи столько раз, сколько раз я скопировал метод.Приведенный ниже код сохранит 3 записи в базе данных.
public function testMain()
{
echo "\n >----------- Test Name : " . get_class($
$this->postSave();
$this->postSave();
$this->postSave();
} //test:main
Использование цикла в testMain () также даст тот же результат, сохранив одну запись.
public function testMain()
{
echo "\n >----------- Test Name : " . get_class($this);
for ($x = 0; $x < 10; $x++) {
$this->postSave();
}
} //test:main
Код репозитория:
class Post_Repo_Impl implements Post_Repo_I
{
public function save2(Post $post)
{
$saveStatus = true;
try {
$post->save();
} catch (Exception $e) {
$saveStatus = false;
error_log("Saveing Post Failed. : " . $e);
}
return $saveStatus;
}
}
Почему я не могу сохранить несколько записей в цикле for, есть ли способ сделать это?
Обновление: создан экземпляр "сообщение объекта "внутри цикла, не решает проблему.
for ($x = 0; $x < 10; $x++) {
$postDummy = new Post();
// $postDummy->id ='';
$postDummy->user_id = 'Tst';
$postDummy->title = 'Post Save Repo Test.';
$postDummy->description = 'UnitTesting of URLs';
$postDummy->total_needed = '2000';
$postDummy->total_collected = '1000';
$postDummy->total_expanse = '500';
$postDummy->start_date = '22-09-2019';
$postDummy->end_date = '22-10-2019';
$postDummy->active = '1';
$postDummy->updated_at = '2019-09-22';
$postDummy->created_at = '2019-09-22';
echo '\n----PostSave----\n' . $x;
$postRepoSave = $this->getRepoPostImpl();
dd($postRepoSave->save2($postDummy));
}