4

Yii のインストールに問題があり、かなり基本的なクエリを取得しようとしていますが、オンライン チュートリアルで取得する必要があるとされている結果が返されません。おおよそ次のような 2 つのモデルがあります。

価格:

class Pricing extends CActiveRecord
{
/**
 * Returns the static model of the specified AR class.
 * @param string $className active record class name.
 * @return Pricing the static model class
 */
public static function model($className=__CLASS__)
{
    return parent::model($className);
}

/**
 * @return string the associated database table name
 */
public function tableName()
{
    return 'pricing';
}

/**
* @return string the primary key
*/
public function primaryKey(){
    return 'ID';
}

...

/**
 * @return array relational rules.
 */
public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'xpricing_routes' => array(self::HAS_MANY, 'PricingRoutes', 'ID_pricing'),
    );
}

および料金ルート:

class PricingRoutes extends CActiveRecord
{
/**
 * Returns the static model of the specified AR class.
 * @param string $className active record class name.
 * @return PricingRoutes the static model class
 */
public static function model($className=__CLASS__)
{
    return parent::model($className);
}

/**
 * @return string the associated database table name
 */
public function tableName()
{
    return 'pricing_routes';
}

/**
* @return string the primary key
*/
public function primaryKey(){
    return 'ID';
}
...
/**
 * @return array relational rules.
 */
public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'xpricing' => array(self::BELONGS_TO, 'Pricing', 'ID_pricing'),
    );
}

次に、コントローラーには次のものがあります。

$criteria = new CDbCriteria;
$criteria->with = array('xpricing_routes'); 
$criteria->together=true;       

$pricing_records = Pricing::model()->findAll($criteria);
$pricing_records_arr = CHtml::listData($pricing_records, 'id', 'name');

echo '<pre>';
print_r($pricing_records);
print_r($pricing_record_arr);
echo '</pre>';

おそらく既にご存じのとおり、pricing とpricing_routes という 2 つのテーブルがあります。価格設定ルート テーブルには、価格設定テーブルの ID フィールドに移動する ID_pricing という外部キーがあります。価格表には 1 つのエントリがあり、価格表テーブルには 4 つのエントリがあり、すべてが価格表の 1 つの項目の主キーを ID_pricing フィールドに持っています。したがって、実行中のクエリに対して 4 つの結果が得られるはずです。Yii が AR で生成したクエリを実行すると、それが得られます。

私たちが抱えている問題は、$pricing_records 変数が Pricing オブジェクトを 1 つしか持たない配列であることです。そのオブジェクトには必要なデータが含まれていますが、実際には使用可能な形式ではありません。$pricing_records_arr 変数は単なる空の配列です。私が見つけたドキュメンテーションは、pricing_routes テーブルからの情報をそれぞれ含む価格設定オブジェクトの配列を取得する必要があることを示唆しているようです。AR を使用してこのデータを取得するのが最善の方法ではないことは承知していますが、これを機能させるには理由があるため、その方法についてのアイデアをいただければ幸いです。

編集:

これは、私が返していたものを誤解していたことが判明しました。この質問に対するコメントは、私が必要としていた情報を提供してくれました。

4

2 に答える 2

0

findall を使用すると、レコードが 1 つでも配列が返されます


$pricing_records = Pricing::model()->findAll($criteria);
foreach($pricing_records as $var){
$var->xpricing_routes->ID_pricing;//any variable
}

または、使用できるフィールドが1つしかない場合



$pricing_records = Pricing::model()->find($criteria);
$pricing_records->xpricing_routes->ID_pricing;//any variable

于 2013-03-15T17:33:58.080 に答える