是否可以使用Cakephp中的行为来设置其中一个基本变量?我想为每个客户提供一个不同的表。
我正在考虑在setup函数中编写它,但大多数变量都是空的。我在app_controller.php中的beforeFind()中创建$ this-> subdomainid,我显然不能在模型中使用。
但我想知道,我可以在行为中选择useTable吗?如果我在PHP中检查主机名并将子域作为基础,我可以使用subdomain_tablename作为表吗?我想为这个表使用subdomain_recipes,subdomain_ingredients这样的命名约定,所以client_然后是正常的命名约定。
目前我只有3个单独的子域名,但我绝对不希望在不同子域名的表格中混合使用数据。我一直在考虑解决方案几天,欢迎一些思考!
答案 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