2012-03-22 13 views
0

データベーステーブルactiveには、ユーザーがメールを確認したかどうかを返す列があります。それはtinyint(1)であり、0に設定されていればそれを厳密にFALSEに対してテストしますが、TRUEは返されません。 ORMを使用してデータベースと通信します。これは、MySQLデータベースに設定されている元のデータ型(Kohana ORM)のデータベースからの戻り値


アクティブTINYINT(1)はい0

if ($user->active === FALSE) // returns FALSE 
if ($user->active === '0') // returns TRUE 

私は解決策のためのAPIで検索してきたとDatabaseクラスにTINYINTデータ型はすでにありました。

==の代わりに==を使用する必要がありますか、それとも他に何かできますか? PHP同等物にDBデータをキャスト、一貫性のあるものを維持するために

+0

偽は0と同一ではありません! - http://php.net/manual/en/language.operators.comparison.php – nnichols

+0

はい、それは、0が整数でも文字列でもなく、ブール値である場合です。それは私がやりたいことです。データベースからBOOLで値を返したいのですが、文字列ではありません。 –

+0

そうではありません。あなたはBINLEANではなく、TINYINT(1)からデータを返すと言っています。 MySQLはとにかくBOOLEANを実装していません。これはTINYINT(1)の同義語です。 – nnichols

答えて

2

は、あなたが正しい意味、3.0以降に削除された - 厳密な比較ん:)

あなたは何ができるかあなたが本当にしたい場合には、ORM::list_columns()と組み合わせるORM::_load_values()を上書きしています「正しい」データ型にキャストする(つまり、PDOに移行すると物事が壊れるため、MySQLドライバを使用している場合)。

+0

Hvala :) [OK]を、私は緩やかな比較を使用するつもりです。私はそれを悪い習慣と考えていましたが、これはKohanaコアファイルを変更するより簡単です。 –