2016-03-21 14 views
3

私はCodeIgniter 3とPostgreSQL 9.4データベースを使用しています。データベースのそれぞれの列のデータ型がブール値の場合、PHPでブール値を取得する方法はありますか?PostgreSQLからブール値を取得する

次のように私はCodeIgnitersクエリビルダクラスを使用しています:

$qry = $this->db->get_where('user', array('username' => mb_strtolower($username))); 
return $qry->row(); 

をユーザテーブルからすべてのブール値は、文字列(「T」と「F」)で表されます。

+0

説明してください。ブール値が 'f'の場合は0を返しますか? – Vickel

+0

http://stackoverflow.com/a/31740990/1222135を参照してください。 – greg

答えて

0

挿入やデータを更新しながら、あなたは、CodeIgniterのは、それらを変換しますが、それはレコードをフェッチしている間に、それは読み込みデータ型の知識がないので、それを行うことはできませんブール値を使用している場合 - それはですORMではなくクエリービルダー。

あなたができることは、特定の結果セットを表すクラスをたくさん作成し、フェッチ時にcustom_result_object() or custom_row_object()を使用することです。
明らかに、 't'/'f'から 'true/false'への変換は、これらのカスタムメイドオブジェクトによって実行されなければなりません。

1

Narfの答えを完成させるために、ここでは、ネイティブブール型に変換する汎用クラスpgsqlが戻ります。 Dbの列がブール値であるかどうかにかかわらず、すべての文字列 "f"または "t"をブール値に変換するため、最適な解決策ではないことに注意してください。

<?php 

class PgSqlObject 
{ 

    public function __set($name, $value) 
    { 
     if ($value === 'f') 
      $value = false; 
     elseif ($value === 't') 
      $value = true; 

     $this->$name = $value; 
    } 

    public function __get($name) 
    { 
     if (isset($this->$name)) 
     { 
      return $this->$name; 
     } 
    } 
} 


$this->db->query($sql)->custom_result_object('PgSqlObject'); 
1

よりよい解決策があります:PDOドライバを使用して、例えば:

$db['default']['dsn']  = 'pgsql:host=localhost;dbname=base'; 
$db['default']['username'] = 'username'; 
$db['default']['password'] = 'password'; 
$db['default']['dbdriver'] = 'pdo'; 
$db['default']['port']  = 5432; 

、あなたの結果はpostgreドライバ(json_encode)で正しい種類

応じて次のようになります。

{ 
    "created_at": "2017-10-20 12:20:49", 
    "created_by": "82027609253", 
    "updated_at": "2017-10-20 12:20:49", 
    "updated_by": "82027609253", 
    "deleted": "f", 
    "id": "184", 
    "codigo_ibge": "1501402", 
    "uf": "PA", 
    "nome": "Belém" 
} 

pdoドライバ(json_encode)での応答:

{ 
    "created_at": "2017-10-20 12:20:49", 
    "created_by": 82027609253, 
    "updated_at": "2017-10-20 12:20:49", 
    "updated_by": 82027609253, 
    "deleted": false, 
    "id": 184, 
    "codigo_ibge": 1501402, 
    "uf": "PA", 
    "nome": "Belém" 
} 
関連する問題