sql >> データベース >  >> RDS >> Mysql

CakePHP 3.5常にasText()MySQL関数を空間フィールドに適用する

    AFAIKにはそのような機能はなく、型クラスとselect句の内容は決して触れません。

    これをすべての検索に適用する場合は、たとえばModel.beforeFind()を使用できます。 イベント、selectをトラバースします 句を使用して、フィールドを式に変換します。これは、fieldの簡単で汚い例です。 POLYGONの名前です タイプ列:

    // 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']
        );
    }
    

    $fieldを考慮する必要がある場合があります 式としても、フィールドが1つで使用され、そこでも変換する必要がある場合に備えて。

    もう1つの方法は、型クラス'toPHP()のPHPレベルでデータを変換することです。 コード例ですでに示されているように、メソッド。

    も参照してください



    1. mysql_query()がSELECTステートメントでTRUEを返すのはなぜですか?

    2. Goとgo-sql-driverを使用してmysqlサーバーに接続するにはどうすればよいですか?

    3. テキストフィールドを使用せずにMySQLデータベースにハッシュを保存する方法

    4. PL / SQL:プロシージャでユーザー入力を促すにはどうすればよいですか?