选择useTable的Cakephp行为?

时间:2011-09-11 03:51:02

标签: cakephp cakephp-appmodel

是否可以使用Cakephp中的行为来设置其中一个基本变量?我想为每个客户提供一个不同的表。

我正在考虑在setup函数中编写它,但大多数变量都是空的。我在app_controller.php中的beforeFind()中创建$ this-> subdomainid,我显然不能在模型中使用。

但我想知道,我可以在行为中选择useTable吗?如果我在PHP中检查主机名并将子域作为基础,我可以使用subdomain_tablename作为表吗?我想为这个表使用subdomain_recipes,subdomain_ingredients这样的命名约定,所以client_然后是正常的命名约定。

目前我只有3个单独的子域名,但我绝对不希望在不同子域名的表格中混合使用数据。我一直在考虑解决方案几天,欢迎一些思考!

1 个答案:

答案 0 :(得分:1)

如果你在同一个数据库中讨论不同的表,你可以这样做:

如果要更改具有相同前缀的每个模型中的表

app_Model

中的

function __construct($id = false, $table = null, $ds = null) {
        $prefix = getPrefix();
    $this->useTable = $prefix.$useTable;
    parent::__construct($id,$table,$ds);
}

就像这样,它会在使用之前更改每个模型表....如果你只想修改模型客户端,只需将相同的功能放在客户端模型中,如果你想在这个模型中做一些相同的操作。如果你想要除了一个以外的所有人在app_model中这样做

function __construct($id = false, $table = null, $ds = null) {
    $prefix = getPrefix();
    if ($this->name != 'Client') 
        $this->useTable = $prefix.$useTable;
    parent::__construct($id,$table,$ds);
}

这不是一种行为,但它解决了你的问题:如果你想在一个行为中做你需要做类似的事情,使用beforeFind,beforeSave等(所有以前在数据库中做某事)或做它在加载模型时(在控制器中它就像这个$ this-> Client-> useTable = $ prefix。$ this-> Client-> useTable;)

请记住,getPrefix()函数是您将使用的函数,它告诉您使用哪个前缀。

我认为你必须总是写var $ useTable ='table';为了这个工作。

如果您想要不同的数据库,请尝试在面包店发布this solution