sql >> Databasteknik >  >> RDS >> Mysql

CakePHP 3.5 Använd alltid asText() MySQL-funktionen på Spatial field

AFAIK det finns ingen sådan funktionalitet, typklasser och välj klausulinnehåll rör aldrig.

Om du vill tillämpa detta på alla fynd, kan du till exempel använda Model.beforeFind() händelse, gå igenom select sats och omvandla fälten till uttryck. Här är ett snabbt och smutsigt exempel, där field är namnet på POLYGON typ kolumn:

// in the respective table class

use Cake\Event\Event;
use Cake\ORM\Query;

// ...

public function beforeFind(Event $event, Query $query, \ArrayObject $options, $primary)
{
    $query->traverse(
        function (&$value) use ($query) {
            if (empty($value)) {
                $value = $query->aliasFields($this->getSchema()->columns());
            }

            foreach ($value as $key => $field) {
                if (is_string($field) &&
                    $this->aliasField($field) === $this->aliasField('field')
                ) {
                    unset($value[$key]);
                    $value[key($query->aliasField($field))] = $query->func()->AsText([
                        $this->aliasField('field') => 'identifier'
                    ]);
                }
            }
        },
        ['select']
    );
}

Du kanske måste ta hänsyn till $field som uttryck också, om fältet kan användas i ett och måste konverteras även där.

Ett annat sätt skulle vara att konvertera data på PHP-nivå i typklassen toPHP() metod, som redan anges i ditt kodexempel.

Se även



  1. Oracle materialiserade vyer med primärnyckel

  2. dela rader i rödförskjutning

  3. mysql_query() förväntar sig att parameter 2 är resurs, sträng ges in

  4. Hierarkisk SQL-fråga