/**
  * Method that retrieves many to one associated records
  * @param  \Cake\ORM\Table       $table       Table object
  * @param  \Cake\ORM\Association $association Association object
  * @return array                              associated records
  */
 protected function _manyToOneAssociatedRecords(\Cake\ORM\Table $table, \Cake\ORM\Association $association)
 {
     $tableName = $table->table();
     $primaryKey = $table->primaryKey();
     $assocTableName = $association->table();
     $assocPrimaryKey = $association->primaryKey();
     $assocForeignKey = $association->foreignKey();
     $recordId = $this->request->params['pass'][0];
     $displayField = $association->displayField();
     $connection = ConnectionManager::get('default');
     $records = $connection->execute('SELECT ' . $assocTableName . '.' . $displayField . ' FROM ' . $tableName . ' LEFT JOIN ' . $assocTableName . ' ON ' . $tableName . '.' . $assocForeignKey . ' = ' . $assocTableName . '.' . $assocPrimaryKey . ' WHERE ' . $tableName . '.' . $primaryKey . ' = :id LIMIT 1', ['id' => $recordId])->fetchAll('assoc');
     // store associated table records
     $result = $records[0][$displayField];
     return $result;
 }
 /**
  * Method that retrieves many to one associated records.
  *
  * @param  \Cake\ORM\Association $association Association object
  * @param \Cake\Network\Request $request passed
  * @return array associated records
  */
 protected function _manyToOneAssociatedRecords(Association $association, Request $request)
 {
     $result = [];
     $tableName = $this->_tableInstance->table();
     $primaryKey = $this->_tableInstance->primaryKey();
     $assocTableName = $association->table();
     $assocPrimaryKey = $association->primaryKey();
     $assocForeignKey = $association->foreignKey();
     $recordId = $request->params['pass'][0];
     $displayField = $association->displayField();
     /*
      * skip inverse relationship
      *
      * @todo find better way to handle it
      */
     if ($tableName === $assocTableName) {
         return $result;
     }
     $connection = ConnectionManager::get('default');
     // NOTE: This will break if $assocTableName has no primary key or has a combined primary key
     $records = $connection->execute('SELECT ' . $assocTableName . '.' . $assocPrimaryKey . ' FROM ' . $tableName . ' LEFT JOIN ' . $assocTableName . ' ON ' . $tableName . '.' . $assocForeignKey . ' = ' . $assocTableName . '.' . $assocPrimaryKey . ' WHERE ' . $tableName . '.' . $primaryKey . ' = :id LIMIT 1', ['id' => $recordId])->fetchAll('assoc');
     // store associated table records, make sure associated record still exists.
     if (!empty($records[0][$assocPrimaryKey]) && $association->exists([$assocPrimaryKey => $records[0][$assocPrimaryKey]])) {
         //$result = $association->get($records[0][$assocPrimaryKey])->{$displayField};
         $records = $association->get($records[0][$assocPrimaryKey]);
     } else {
         $records = null;
     }
     try {
         $csvFields = $this->_getAssociationCsvFields($association, static::ASSOC_FIELDS_ACTION);
     } catch (\Exception $e) {
         $csvFields = [];
     }
     // get associated index View csv fields
     $fields = array_unique(array_merge([$association->displayField()], $csvFields));
     // store association name
     $result['assoc_name'] = $association->name();
     // store associated table name
     $result['table_name'] = $association->table();
     // store associated table class name
     $result['class_name'] = $association->className();
     // store associated table display field
     $result['display_field'] = $association->displayField();
     // store associated table primary key
     $result['primary_key'] = $association->primaryKey();
     // store associated table foreign key
     $result['foreign_key'] = Inflector::singularize($assocTableName) . '_' . $association->primaryKey();
     // store associated table fields
     $result['fields'] = $fields;
     // store associated table records
     $result['records'] = $records;
     return $result;
 }