我已经构建了一个在客户端运行的应用程序(JavaScript&HTML),它需要访问和更新服务器上的数据。它有一个由5个表组成的模式。我已经定义了它们在JSON中应该是什么样子。我希望这些可以作为一个JSON服务从Drupal模块提供。我了解如何使用drupal_json_输出来提供结果。我只是找不到一个简单的方法来确保为他们创建数据库表,然后从中添加和删除项目。我想保持Drupal与底层数据库的独立性。我不需要任何搜索功能、表单功能等,我只想使用Drupal的数据库抽象。
目前,我已在安装文件中尝试了以下操作:

/**
 * Implements hook_schema
 */
function rcsarooms_schema(){
    $schema = array();
    $schema['rcsarooms'] = array(
        'description' => 'Stores the structured information about the rooms and staircases.',
        'fields' => array(
            'ID' => array(
                'type' => 'varchar',
                'length' => 10,
                'not null' => TRUE,
                'description' => 'Primary Key: used in the URLs to identify the entity.'
            ),'Name' => array(
                'type' => 'varchar',
                'length' => 200,
                'not null' => TRUE,
                'description' => 'The name used for links in the navigation menues.'
            ),'ParentID' => array(
                'type' => 'varchar',
                'length' => 10,
                'not null' => TRUE,
                'description' => 'The ID of the parent element or "Root" if this is a root element'
            ),'Type' => array(
                'type' => 'varchar',
                'length' => 15,
                'not null' => TRUE,
                'description' => 'page, staircase, house, room or special'
            ),'BathroomSharing' => array(
                'type' => 'int',
                'description' => 'The number of people the bathroom is shared with (0 for unknown)'
            ),'RentBand' => array(
                'type' => 'int',
                'description' => 'The ID of the rent band the room is in.'
            ),'Floor' => array(
                'type' => 'int',

            'description' => 'The floor number (0 is courtyard level).'
        )
    ),
    'primary key' => array('ID')
);

return $schema;
}

以及模块文件中的以下内容:
/**
 * Implements hook_menu
 */
function rcsarooms_menu(){
    $items['rcsarooms'] = array(
        'page callback' => 'rcsarooms_callback',
        'access callback' => TRUE,
        'type' => MENU_CALLBACK
    );
   return $items;
}
function rcsarooms_callback(){
    drupal_json_output(db_query("SELECT * FROM {rcsarooms}"));
    drupal_exit();
    return;
}

当我尝试导航到rcsarooms时,会出现以下错误:
PDOExt:SqLtSt[42S02]:未找到基表或视图:1146个表“db .rcSAROOM”不存在:从RcSAROMSOSCALBACK()中选择*{RCracoOS};数组()

最佳答案

您可能在寻找hook_schema()在安装模块时,Drupal将使用它来创建您的自定义表。它进入mymodule.install文件。
Schema API将告诉您有关数据类型等的所有信息。
使用db_insert()db_update()db_merge()函数从数据库中添加/删除项

关于php - 如何在Drupal中的自定义实体上定义和执行CRUD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8627936/

10-16 07:33