我可以将数据库适配器设置为在 Zend_Db_Table_Abstract 类中永久使用吗?

发布于 2024-07-18 22:02:46 字数 227 浏览 9 评论 0原文

我的站点使用了 2 个数据库,其中包括一个与其他站点特定数据库相关的中央用户数据库。

有时调用 new User(array('db'=>'adapter1')); 就足够了(但从来不方便); 但其他时候,例如在声明不同数据库上的表之间的关系时,则无法执行此操作。

有谁知道在 Zend_Db_Table_Abstract 类中指定要使用哪个数据库适配器的方法?

谢谢!

I have 2 databases that my site uses including a central user database that relates to other site-specific databases.

Sometimes it is adequate to call new User(array('db'=>'adapter1')); (but never convenient); other times, though, such as when declaring relationships between tables on different databases, there is no way to do this.

Does anyone know a way to specify which database adapter to use from within the Zend_Db_Table_Abstract class?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

乖乖公主 2024-07-25 22:02:46

回到这个问题已经很晚了,但是这里的答案都没有对我有用。 我的一些数据库模型需要使用“tdb”,并且将以下代码添加到每个类中以自动发生:

protected function _setupDatabaseAdapter()
{
    $this->_db = Zend_Registry::get('tdb');
    parent::_setupDatabaseAdapter();
}

我感谢大家一路以来的建议!

Getting back to this pretty late, but none of the answers here quite did it for me. A select few of my database models needed to use 'tdb' and the following code was added to each of those classes to have that happen automatically:

protected function _setupDatabaseAdapter()
{
    $this->_db = Zend_Registry::get('tdb');
    parent::_setupDatabaseAdapter();
}

I thank you all for your suggestions along the way!

南风起 2024-07-25 22:02:46

Zend_Db_Table_Abstract 提供了一个静态方法来设置默认数据库适配器。 执行以下操作:

Zend_Db_Table_Abstract::setDefaultAdapter($adapter);

现在,所有 Table 对象都将默认使用您的适配器。

注意:在线文档有时并没有明确说明这一点,因此第二个最佳检查位置是在此处的 API 中: http://framework.zend.com/apidoc/core/

Zend_Db_Table_Abstract provides a static method to set the default database adapter. Do this as follows:

Zend_Db_Table_Abstract::setDefaultAdapter($adapter);

Now, all your Table objects will use your adapter by default.

Note: the online docs sometimes don't make this obvious, so your second best place to check is in the API here: http://framework.zend.com/apidoc/core/

爱的故事 2024-07-25 22:02:46

您可以在构造函数中将类变量 $_db 设置为正确的适配器。

global $adapter1; //There are better ways than using a global variable

$this->_db = $adapter1;

假设适配器对象可以在构造函数中引用。 这似乎不太便携,但我相信它会起作用。

You could set the class variable $_db to the correct adapter in the constructor.

global $adapter1; //There are better ways than using a global variable

$this->_db = $adapter1;

Assuming the adapter object can be referenced in the constructor. That doesn't seem to portable, but I believe it would work.

慕烟庭风 2024-07-25 22:02:46

init 函数可以使用,它在 Zend_Db_Adapter_Abstract 中没有使用, 可以在您的类中使用来设置需要完成的任何操作。 _setAdapter 接受命名注册表项的字符串。

public function init()
{
    $this->_setAdapter('tdb');
}

The init function can be used, it is not used in Zend_Db_Adapter_Abstract, can be used in your class to setup whatever needs to be done. _setAdapter accepts a string naming a Registry Key.

public function init()
{
    $this->_setAdapter('tdb');
}
黯然 2024-07-25 22:02:46

生产中特定不同数据库的示例。
您可以在这里应用一些逻辑。

class SomeTable extends Zend_Db_Table_Abstract {

    /*
     * 
     */

    public function init(){

        if(APPLICATION_ENV == 'production'){
            $secondary_db = Zend_Db::factory(
                'PDO_MYSQL',
                Array(
                    'host'      => DB_SECONDARY_HOST,
                    'username'  => DB_SECONDARY_USER,
                    'password'  => DB_SECONDARY_PASSWORD,
                    'dbname'    => DB_SECONDARY_NAME,
                    'charset'   => 'utf8'
                )
            );

            $this->_setAdapter($secondary_db);
        }
    }

    /*
     * 
     */
}

Example for specific different DB on production.
You can apply some logic here.

class SomeTable extends Zend_Db_Table_Abstract {

    /*
     * 
     */

    public function init(){

        if(APPLICATION_ENV == 'production'){
            $secondary_db = Zend_Db::factory(
                'PDO_MYSQL',
                Array(
                    'host'      => DB_SECONDARY_HOST,
                    'username'  => DB_SECONDARY_USER,
                    'password'  => DB_SECONDARY_PASSWORD,
                    'dbname'    => DB_SECONDARY_NAME,
                    'charset'   => 'utf8'
                )
            );

            $this->_setAdapter($secondary_db);
        }
    }

    /*
     * 
     */
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文