RedBean: для этого ключа уже указана база данных

у меня проблемы с RedBean. Я получаю сообщение об ошибке подключения и не могу понять, что это значит, я уже просмотрел Google и не смог найти подходящего решения, я пробовал аналогичный вопрос здесь, но ответ на самом деле не помог в этом случае .

У меня есть два класса: User и DAL.

Класс ДАЛ:

namespace Models;

use Config\Helpers as Helpers;
use Lib\RedBean\R as R;
use Lib\RedBean\Plugin\ModelValidation as ModelValidation;

class DAL extends R
{
    function __construct()
    {
        R::setup( 'mysql:host=localhost;dbname=angularjs', 'user', 'pass' );

        R::ext('validate', function($bean)
        {
            return ModelValidation::validate($bean);
        });
    }

    public function createBean($tableName)

    public function create($bean)

    public function read($tableName, $id = 0)

    function __destruct()
    {
       R::close();
    }
}

Класс пользователя:

namespace Models;

use Models\DAL as DAL;
use Lib\JWT\JWT as JWT;
use Config\Helpers as Helpers;
use Lib\RedBean\SimpleModel as SimpleModel;

class Usuario extends SimpleModel
{
    public static $rules = [
        'login' => [
            'label' => 'Login',
            'filter' => 'trim|sanitize_string',
            'validation' => 'required|alpha_numeric',
        ],
        'senha' => [
            'label' => 'Senha',
            'validation' => 'required|alpha_numeric|min_len,6',
            'message' => 'I don not like this password. This is an example of a bad message.'
        ],
    ];

    public function login()

    public function logout()

    public function criaUsuario()
    {
        $DAL = new DAL();

        //user creation code
    }

    public function criaToken($usuarioId = 0)
    {
        $DAL = new DAL();

        //Token creation code
    }
}

И это ошибка:

Fatal error:  Uncaught exception 'Lib\RedBean\RedException' with message 'A database has already been specified for this key.' in D:\Projetos\Market Media\backend\Lib\RedBean\Facade.php:288
Stack trace:
#0 D:\Projetos\Market Media\backend\Lib\RedBean\Facade.php(206): Lib\RedBean\Facade::addDatabase('default', 'mysql:host=loca...', 'angularjs', 'root', false)
#1 D:\Projetos\Market Media\backend\Models\DAL.php(13): Lib\RedBean\Facade::setup('mysql:host=loca...', 'angularjs', 'root')
#2 D:\Projetos\Market Media\backend\Models\Usuario.php(67): Models\DAL->__construct()
#3 D:\Projetos\Market Media\backend\Models\Usuario.php(56): Models\Usuario->criaToken('27')
#4 D:\Projetos\Market Media\backend\API\UsuarioAPI.php(42): Models\Usuario->criaUsuario()
#5 D:\Projetos\Market Media\backend\API\BaseAPI.php(82): API\UsuarioAPI->criaUsuario(Array)
#6 D:\Projetos\Market Media\backend\Controllers\UsuarioController.php(13): API\BaseAPI->processAPI()
#7 D:\Projetos\Market Media\backend\index.php(26): Controllers\UsuarioController->start()
# in D:\Projetos\Market Media\backend\Lib\RedBean\Facade.php on line 288

person Ariel    schedule 16.06.2016    source источник


Ответы (3)


каждый раз, когда вы создаете новый экземпляр DAL rb, попробуйте настроить базу данных с ключом «по умолчанию», попробуйте поместить R:: setup вне класса, один раз в приложении

person Thiago Cordeiro    schedule 16.06.2016
comment
Глупый я, конструктор был не самым умным местом для соединения! Спасибо - person Ariel; 16.06.2016
comment
предупреждение о шаблонах! - person Coldstar; 04.10.2017

если вы используете функцию R::setup() внутри метода построения, вы чаще всего используете этот синтаксис:

public __construct (){
    if(!R::testConnection()){
        R::setup($DSN, $USER, $PASSWORD);
    }
}
person Navid_pdp11    schedule 29.08.2016

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

person MohammadReza Vahedi    schedule 29.08.2018