Проблема Redbean + Slim Framework, RedBeanPHP \ RedException \ SQL SQLSTATE [42S02]: Базовая таблица или представление не найдены: 1146 Таблица «test_api.post» не существует

Я просто хочу создать приложение, используя Slim Framework и RedBeanPHP4, я использую mysql и имя базы данных «test_api», БД была создана с пустой таблицей. Насколько мне известно, при использовании redbeanphp мы могли бы создать таблицу на -fly. и вот мой короткий код:

<?php

require 'vendor/autoload.php';

// DB
require 'db/rb.php';
R::setup('mysql:host=localhost;dbname=test_api', 'root','mypassword');
R::freeze(true);

// SLIM
$app = new \Slim\Slim();

$app->get('/post', function () use ($app) {
$post = R::dispense('post');
$post->text = 'Hello World';

$id = R::store($post);
echo $id;
});

$app->run();
?>

но я получил такую ​​ошибку:

    Slim Application Error
The application could not run because of the following error:

Details

Type: RedBeanPHP\RedException\SQL
Message: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test_api.post' doesn't exist
File: /srv/http/prj/lpse2/db/rb.php
Line: 631

Может ли кто-нибудь здесь, что поможет мне решить эту проблему?

0

Решение

У меня была такая же проблема с RedBeanPHP (4.2)

RedBeanPHP\Facade::dispense('MY_TABLE')
Invalid type: MY_TABLE

… даже если таблица уже существует в БД.

Я недавно нашел «решение»:

  1. Отредактируйте файл «rb.php» в строке 10445 (версия 4.2)
  2. Замените эту часть кода:

     if ( !preg_match( '/^[a-z0-9]+$/', $type ) ) {
    throw new RedException( 'Invalid type: ' . $type );
    }
    

этим:

     if ( preg_match( '/^[0-9]+$/', $type ) ) {
throw new RedException( 'Invalid type: ' . $type );
}

IMO, исключение, поднятое RB, происходит из заглавных букв названия таблицы.

-1

Другие решения

Если вы все еще хотите, чтобы ReadBean изменил схему на (создать таблицу на лету), тогда он должен быть в fluid Режим. Это режим по умолчанию, но вы явно изменили его R::freeze(true);

Когда режим установлен на freeze он не может изменить схему. Вам нужно только установить R::freeze(true); в производстве после создания схемы.

1

По вопросам рекламы [email protected]