Croogo/CakePHP:插件:OnActivation问题-不能同时从Schema和表条目(通过Model实例)创



我目前正在开发一个现有的插件,在根据我的意愿延长。但我遇到了一个主要问题:当第一次激活插件(onActivation方法)时,必须创建所需的表,以防它们不存在。在里面事实上,它们是被创造出来的,它正常工作。但紧接着,我我正在创建插件模型的实例,以便保存第一个最近创建的一个表中的模型条目。然而,这确实不起作用。表已创建,但我收到一个SQL错误:Croogo/CakePHP声称,这些表并不存在。但是他们实际上是这样。如果我多次点击刷新,插件就会得到再次退出。然后这些表已经存在,下一个激活成功:输入样本数据。

这个doe鼻涕似乎是一个缓存问题,因为我已经玩了带着这个。我还尝试使用loadModel而不是ClassRegistry。但这根本不会改变任何事情。

这是我的代码:

class SitesActivation {
public function beforeActivation(&$controller) {
    return true;
}
public function onActivation(&$controller) {
    App::import('Model', 'CakeSchema');
    App::import('Model', 'ConnectionManager');
    App::import('Libs', 'Sites.sites');
    include_once(APP.'plugins'.DS.'sites'.DS.'config'.DS.'schema'.DS.'schema.php');
    $db = ConnectionManager::getDataSource('default');
    //Get all available tables
    $tables = $db->listSources();
    $CakeSchema = new CakeSchema();
    $SiteSchema = new SitesSchema();
    if (!in_array('sites', $tables)) {
        $db->execute($db->createSchema($SiteSchema, 'sites'));
    }
    if (!in_array('site_domains', $tables)) {
        $db->execute($db->createSchema($SiteSchema, 'site_domains'));
    }
    if (!in_array('sites_nodes', $tables)) {
        $db->execute($db->createSchema($SiteSchema, 'sites_nodes'));
    }
    //Insert "ALL SITES"
    $Site = ClassRegistry::init('Sites.Site');
    $Site->create();
    $data = array(
        'Site' => array(
            'id' => Sites::ALL_SITES,
            'title' => 'All Sites',
            'tagline' => Configure::read('Site.tagline'),
            'email' => Configure::read('Site.email'),
            'locale' => Configure::read('Site.locale'),
            'status' => Configure::read('Site.status'),
            'timezone' => Configure::read('Site.timezone'),
            'theme' => Configure::read('Site.theme'),
            'default' => 1,
        ),
        'SiteDomain' => array(
            'site_id' => Sites::ALL_SITES,
            'domain' => env('HTTP_HOST'),
        ),
    );
    $Site->saveAll($data);
    /*$db->execute($db->rawQuery(
        'INSERT INTO sites ( id, title, tagline, email, locale, status, timezone, theme, default ) VALUES( 
        "1",
        "All Sites",
        "' . Configure::read('Site.tagline') . '",
        "' . Configure::read('Site.email') . '",
        "' . Configure::read('Site.locale') . '",
        "' . Configure::read('Site.status') . '",
        "' . Configure::read('Site.timezone') . '",
        "' . Configure::read('Site.theme') . '",
        "1"
        )'
    ));*/
}
public function beforeDeactivation(&$controller) {
    return true;
}
public function onDeactivation(&$controller) {
}
}

非常感谢您的支持!

看起来cake已经缓存了存在的表,并且在创建新表后,缓存不会更新。

有一种方法可以在不使用缓存的情况下创建模型实例,或者在创建实例之前只清除缓存。

查看api文档,了解有关此的更多信息

最新更新