具有 Phalcon 模型的命名空间

Namespaces with Phalcon models

我有一个使用命令 phalcon project simple --type=simple 制作的项目。

我根本没有改变结构。

让我感到困惑的部分是我查看了两个数据库。

我想访问两个数据库 ABAccount 模型,使用出去做 $account = AAccount::find();$account = BAccount::find();.

这样的事情

我目前有这个代码:

model/AAccount.php

class AAccount extends Phalcon\Mvc\Model {
    // use DB A
}

model/BAccount.php

class BAccount extends Phalcon\Mvc\Model {
    // use DB B
}

这样做的最佳方式是什么?命名空间?我无法更改两者的 table 名称 帐户

不知道我是否理解你的问题:你有两个同名的表,但是它们在两个不同的模式(数据库)中?如果是,我有同样的问题,我用下面的结构解决它(你可以在我的 bauhaus project) (see this reference too: point to other schema (Phalcon - Working with Model) 中看到这段代码的一部分):

(1) 基础模型 class 位于 models/:

namespace MyApp\Model;

class Base extends \Phalcon\Mvc\Model
{
     // code for your model base class
}

(2) 架构 A 的基础 class 位于 models/schema-a/:

namespace MyApp\Model\SchemaA;

class Base extends MyApp\Model\Base
{
    // ...

    // returns the name of the schema A
    public function getSchema()
    {
        return `schema_a_name`;
    }

    // ...
}

(3) 架构 B 的基础 class 位于 models/schema-b/:

namespace MyApp\Model\SchemaB;

class Base extends MyApp\Model\Base
{
    // ...

    // returns the name of the schema B
    public function getSchema()
    {
        return `schema_b_name`;
    }

    // ...
}

(4) 模式 A 中的帐户模型位于 models/schema-a/:

namespace MyApp\Model\SchemaA;

class Account extends Base
{
    // ...
}

(5) 模式 B 中的帐户模型位于 models/schema-b/:

namespace MyApp\Model\SchemaB;

class Account extends Base
{
    // ...
}

当你有固定数量的模式时,这个解决方案很有效,但如果你有不固定数量的模式,我认为更好的解决方案是在模型库的 getSchema 函数中创建一个逻辑。类似于:

public function getSchema()
{
    // this is just a suggest
    return $this->getDI()->scope->currentSchema;
}

希望对您有所帮助

注意:在使用命名空间创建模型之间的关系时必须小心。