laravel-doctrine / fluent

Fluent mapping driver for Doctrine2
http://www.laraveldoctrine.org/docs/current/fluent
MIT License
43 stars 22 forks source link

Index method not obeying columName() it tries to create the index using the field name instead #62

Open lsrzj opened 6 years ago

lsrzj commented 6 years ago

When trying to use this kind of construct $builder->integer('userId')->columnName('user_id')->index('user_id_token_index')->nullable(); Fluent is giving me the error that there is no column named userId on the database. Obvious, because I changed the column name and I'm not using the class's field name. So I tried a workaround that I don't know if it's the correct form to implement it, but solved the issue. Bellow the code snippets:

Field.php

/**
 * @param string|null $name
 *
 * @return Field
 */
public function index($name = null)
{
    if (!isset($this->fieldBuilder->getMapping()['columnName'])){
        $columnName = $this->getName();
    } else {
        $columnName = $this->fieldBuilder->getMapping()['columnName'];
    }
    $index = new Index(
    $this->metaDatabuilder,
      [$columnName]//$this->getName()]
    );

    if ($name !== null) {
        $index->name($name);
    }

    $this->callbackAndQueue($index);

    return $this;
}

FieldBuilder.php, added a method to get the mapping information

public function getMapping() {
    return $this->mapping;
}

Another workaround is to do like this on the mapping file:

$builder->integer('userId')->columnName('user_id');
$builder->index('user_id');