Laravel не может найти мою таблицу при тестировании с использованием альтернативного соединенияPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel не может найти мою таблицу при тестировании с использованием альтернативного соединения

Сообщение Anonymous »

У меня есть приложение на Laravel, которое требует использования разных соединений. Моя модель User требует обычного подключения «mysql», а связанная модель, назовем ее «

Код: Выделить всё

HBSPT_COMPANIES
" требует "

Код: Выделить всё

snowflake
». У меня не возникает проблем при взаимодействии с этими двумя соединениями до тестирования. Что касается миграций, у меня есть MySQL, но у меня нет миграций для соединения «снежинка», поскольку это своего рода внешний источник данных.< /p>
При тестировании мое обычное соединение MySQL заменяется простым соединением sqlite в памяти, я использую признак RefreshDatabase для запуска миграции для соединений MySQL, но у меня есть Snowflake_testing.sqlite , который должен использоваться вместо соединения «снежинка» с некоторыми данными тестирования.
Моя проблема заключается в том, что при попытке получить данные в моих тестах я получаю:

Код: Выделить всё

SQLSTATE[HY000]: General error: 1 no such table: HBSPT_COMPANIES (Connection: snowflake_testing, SQL: select * from "HBSPT_COMPANIES" where "name" = TEST_STUDENT)
У меня есть .env.testing вот так:

Код: Выделить всё

...
APP_ENV=testing

DB_CONNECTION=sqlite
DB_DATABASE=:memory:

SNOWFLAKE_DB_CONNECTION=snowflake_testing
SNOWFLAKE_DB_DATABASE=/path/to/file/database/snowflake_testing.sqlite
...
И в моем config/database.php добавлена ​​следующая конфигурация

Код: Выделить всё

'snowflake_testing' => [
'driver' => 'sqlite',
'database' => env('SNOWFLAKE_DB_DATABASE'),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
Это мой тест:

Код: Выделить всё

use Tests\TestCase;

class ReportPolicyTest extends TestCase
{

use RefreshDatabase;

#[Test]
public function it_allows_a_student_to_see_the_student_report(): void
{

$activeSchool = HubspotCompany::query()
->where('name', 'TEST_STUDENT')->get();
Это моя модель HubspotCompany:

Код: Выделить всё

class HubspotCompany extends Model
{

use HasFactory;
.
.
.
protected $primaryKey = 'HS_OBJECT_ID';

public $incrementing = false;

protected $table = 'HBSPT_COMPANIES';

public function __construct(array $attributes = array())
{

parent::__construct($attributes);

$connection = config('app.env') !== 'testing' ? 'snowflake' : 'snowflake_testing';

$this->setConnection($connection);

}
К сожалению, каждый ресурс в Google, который я нашел, рассказывает о том, как установить sqlite в качестве основного соединения с базой данных, которое будет переписано с использованием типажа RefreshDatabase, я не смог найти ничего относительно уже сгенерированных фиктивные данные для phpunit и Laravel
Очевидно, я пытался проверить, что мой Snowflake_testing.sqlite действительно содержит таблицу и некоторые данные, используя этот запрос:

Код: Выделить всё

select *
from HBSPT_COMPANIES
where "name" = "TEST_STUDENT" limit 1
И я получил ожидаемые данные:
[img]https:// i.sstatic.net/jt11TsiF.png[/img]

Я пробовал поиграться с именованием и подключением, но кажется, что с этим уже все в порядке.

Подробнее здесь: https://stackoverflow.com/questions/785 ... connection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»