我有一個問題,在我的 Laravel 測驗中,ID 總是更高,我希望條目總是具有 id 1、2、3。做這個的最好方式是什么?
public function test_can_user_update_ticket()
{
TicketPriority::factory(3)->create();
TicketStatus::factory(3)->create();
TicketType::factory(3)->create();
}
uj5u.com熱心網友回復:
RefreshDatabase根據您使用的是記憶體資料庫還是傳統資料庫,該特征采用最優化的方法來遷移您的測驗資料庫。在您的測驗類上使用該特征,一切都會為您處理。
https://laravel.com/docs/8.x/database-testing#resetting-the-database-after-each-test
uj5u.com熱心網友回復:
您必須創建這樣的記錄
factory(App\TicketPriority::class, 3)->create();
factory(App\TicketStatus::class, 3)->create();
factory(App\TicketType::class, 3)->create();
這將為您創建 3 條帶有增量 ID 的記錄。還嘗試將每個模型的 id id 型別作為自動增量。
$table->id();
uj5u.com熱心網友回復:
您在這里有兩個選擇:
(1) 當您使用工廠實體化模型時,您可以進行行內狀態轉換并更改該模型的屬性,例如:
$ticketPriority = TicketPriority::factory()->make([
'id' => 3,
]);
(2) 否則,您可以在工廠類本身中設定它。我認為使用第二個選項的缺點是,任何閱讀您的測驗的人都不會立即看出您正在實體化的模型具有硬編碼的 id 值,如果您在應用程式中使用工廠,那么它將始終回傳相同的值值,除非您使用選項 (1) 覆寫它,例如:
<?php
namespace Database\Factories;
use App\Models\TicketPriority;
use Illuminate\Database\Eloquent\Factories\Factory;
class TicketFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = TicketPriority::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'id' => 3,
];
}
}
任一選項都將允許您始終回傳相同的 ID 或您希望保持不變以進行測驗的任何其他屬性。
Laravel 檔案https://laravel.com/docs/9.x/database-testing#defining-model-factories中有更多關于此的內容。
uj5u.com熱心網友回復:
您可以將帶有列名的陣列傳遞給創建函式,您將修改該陣列。像那樣:
for($i=0; $i<3; $i ) {
TicketPriority::factory()->create(['id' => ($i 1)]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/432533.html
標籤:拉拉维尔
