Laravel Ошибка PHPUnit mysql полнотекстовый индекс - PullRequest
0 голосов
/ 30 мая 2020

Только что произошла ошибка при запуске PHPUnit в Laravel после добавления индекса FULLTEXT

Doctrine\DBAL\Driver\PDOException: SQLSTATE[HY000]: General error: 1 near "name": syntax error

После исследования ошибка, вызванная миграцией, которую я добавил

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddFulltextIndexToProductName extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        DB::statement('ALTER TABLE products ADD FULLTEXT fulltext_index(name)');
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        DB::statement('DROP INDEX `fulltext_index`');
    }
}

Если Я удаляю этот код миграции, тест проходит корректно

Кто-нибудь сталкивался с этой проблемой?

1 Ответ

0 голосов
/ 30 мая 2020

Обычно Laravel тестов используются в базе данных sqlite в памяти, и этот оператор в вашей миграции не будет работать. Вы можете проверить, как создать полнотекстовый индекс sqlite здесь: https://www.sqlitetutorial.net/sqlite-full-text-search/

Поскольку Laravel не поддерживает полнотекстовый поиск из коробки, я предполагаю, что вы написали настраиваемую функцию, которая вероятно, также не будет работать в тестах.

Чтобы решить эту проблему, вы можете:

  • использовать mysql для теста (не рекомендуется, поскольку он медленный)
  • использовать шаблон репозиториев
  • пропускать миграцию при тестировании (если вы не тестируете поиск - он вам не нужен). Вы можете проверить с помощью if(env('APP_ENV') === 'testing')
  • используйте laravel скаут для поиска
...