具有 Phalcon 模型的命名空间
Namespaces with Phalcon models
我有一个使用命令 phalcon project simple --type=simple
制作的项目。
我根本没有改变结构。
让我感到困惑的部分是我查看了两个数据库。
我想访问两个数据库 A 和 B 的 Account 模型,使用出去做 $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;
}
希望对您有所帮助
注意:在使用命名空间创建模型之间的关系时必须小心。
我有一个使用命令 phalcon project simple --type=simple
制作的项目。
我根本没有改变结构。
让我感到困惑的部分是我查看了两个数据库。
我想访问两个数据库 A 和 B 的 Account 模型,使用出去做 $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;
}
希望对您有所帮助
注意:在使用命名空间创建模型之间的关系时必须小心。