-
Notifications
You must be signed in to change notification settings - Fork 173
Creating a resource that takes data from a secondary database
jeff-h edited this page Oct 22, 2015
·
1 revision
It's trivial to create a resource which provides data to the REST API that is taken from a secondary database (for more on how Drupal can connect to multiple databases, see https://www.drupal.org/node/18429).
-
Set up a resource that extends
RestfulDataProviderDbQuery
. An easy way to get started is to clone the restful_example module'swatchdog
resource (restful/modules/restful_example/plugins/restful/db_query/watchdog
). -
Make sure you modify the
$plugin
array so it references the correct database table and table ID e.g.
$plugin = array(
...
'data_provider_options' => array(
'table_name' => 'my_external_db_table',
'id_column' => 'external_table_id_column_name',
),
...
);
- Your
publicFieldsInfo
fields can then reference the columns in your external database table. e.g.
public function publicFieldsInfo() {
$public_fields['name'] = array(
'property' => 'name_column_in_external_db_table',
);
- In your
RestfulSomethingResource.class.php
override thegetQuery()
method with your own, similar to the following:
/**
* Get a basic query object.
*
* @return SelectQuery
* A new SelectQuery object for this connection.
*/
protected function getQuery() {
$table = $this->getTableName();
return Database::getConnection('default', 'my_other_database')->select($table)->fields($table);
}
This will correspond to a settings.php
config such as:
$databases = array (
'default' => array (
'default' => array (
'driver' => 'mysql',
'database' => 'drupal',
'username' => 'mysqlusername',
'password' => 'oui&^%fgso^iuhfsh99hrf',
'host' => 'localhost',
'port' => '',
'prefix' => '',
),
),
'my_other_database' => array (
'default' => array (
'driver' => 'mysql',
'database' => 'my_other_database',
'username' => 'mysqlusername',
'password' => 'oui&^%fgso^iuhfsh99hrf',
'host' => 'localhost',
'port' => '',
'prefix' => '',
),
),
);