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

DB::raw式を使用したPOINT/POLYGONなどのLaravelモデル

    基本モデルを次の機能で拡張することにより、すべてのモデルでこれを一般的に解決しました。

    • 幾何学的データを保持する属性の配列を定義します。
    • これをテキストとして自動ロードするかどうかは、モデルごとに決定します。
    • デフォルトのクエリビルダーを変更して、データベースからジオメトリ属性をテキストとして選択します。

    現在使用しているベースモデルからの抜粋です:

    /**
     * The attributes that hold geometrical data.
     *
     * @var array
     */
    protected $geometry = array();
    
    /**
     * Select geometrical attributes as text from database.
     *
     * @var bool
     */
    protected $geometryAsText = false;
    
    /**
     * Get a new query builder for the model's table.
     * Manipulate in case we need to convert geometrical fields to text.
     *
     * @param  bool  $excludeDeleted
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function newQuery($excludeDeleted = true)
    {
        if (!empty($this->geometry) && $this->geometryAsText === true)
        {
            $raw = '';
            foreach ($this->geometry as $column)
            {
                $raw .= 'AsText(`' . $this->table . '`.`' . $column . '`) as `' . $column . '`, ';
            }
            $raw = substr($raw, 0, -2);
            return parent::newQuery($excludeDeleted)->addSelect('*', DB::raw($raw));
        }
        return parent::newQuery($excludeDeleted);
    }
    


    1. ランダムな時間間隔を生成し、phpを使用してそれをmysql日時に追加するにはどうすればよいですか?

    2. MySQLで引用符を含むデータを保存する方法

    3. PHP / MySQLサイトでの同時ユーザーログインを防ぐ方法は?

    4. PostgreSQLでのJSONBの使用:PostgreSQLでJSONデータを効果的に保存およびインデックス付けする方法