2011-12-21 5 views
1

Zendのフレームワークに参加し、私はcountry.idにテーブルという名前の国が参加し、左たい= firm_dtl.firm_country左は、私はZFで新しいです

$firmobj->fetchAll($firmobj->select($this)->where("firm_name like '$alpha%'")->order('firm_name')); 

私はこれをどのように行うことができます。 私はこのコードを使用しようとしています: -

$firmobj->select($this)->joinLeft(array("c"=>"country"), "c.id = firm_dtl.firm_country","c.name")->where("firm_name like '$alpha%'")->order('firm_name'); 
+0

このコードは機能しませんか? –

答えて

2

joinLeft関数の3番目のパラメータは、あなたが取得したい列の配列でなければなりません。

$firmobj->select($this) 
     ->joinLeft(array("c"=>"country"), "c.id = firm_dtl.firm_country", array("c.name")) 
     ->where("firm_name like '$alpha%'") 
     ->order('firm_name'); 

また、より良い方法は、関数こうしてどこ使用することです。

->where("firm_name like ?", $alpha . "%") 

この方法では、より安全なソリューションです。

3

ここでは、左の結合を有効にしたり、セキュリティを向上させたりするためのいくつかのことを示します。

私は通常、複数の行にまたがってselect文を作成します。そのため、変数に入れるのが好きです。デバッグするには、私が必要としない行をコメントアウトするだけです。

$select = $firmobj->select()->from('country'); 

あなたはおそらく、クエリからの結果を変更してコミットされることはありませんので、あなたはsetIntegrityCheck(false)したいと思います。 ZFのドキュメントから引用しています。

はZend_Db_Table_Selectは、主にそれが法的なSELECTクエリの基準を強制することができるように を制約し、検証するために使用されます。ただし Zend_Db_Table_Rowコンポーネントの柔軟性が必要な場合があり、書き込み可能または削除可能な行を必要としない場合があります。 この特定のユーザーの場合、FALSE値をsetIntegrityCheck()に渡すことによって行または 行セットを取得できます。あなたが参加するのはここ

$select->setIntegrityCheck(false); 

です。 field1、field2、fieldnを、結果に表示するfirm_dtlテーブルのフィールドに置き換えることができます。 SQLインジェクション攻撃を避けるために

$select->joinLeft(array('c' => 'country'), 'c.id = firm_dtl.firm_country', array('field1', 'field2', 'fieldn')); 

使用パラメータ置換。

$select->where('firm_name LIKE ?', "$alpha%"); 

最後に結果を順序付けし、行セットをフェッチします。

$select->order('firm_name'); 
$rowSet = $firmobj->fetchAll($select); 
関連する問題