web-dev-qa-db-ja.com

Yii findByAttributes()with great thanattribute。

私はしばらくの間Yiiを使用していて、データベースからデータをプルしたいときは、通常、findByAttributesを使用します。

$model=Auction::model()->findAllByAttributes(array('status'=>'1'));

またはそれらの線に沿った何か。

私の質問は、大なり記号の状況をどのように処理するかということです。私は試した

$model=Auction::model()->findAllByAttributes(array('starttime'>=$date));

日付には現在の日付/時刻設定が割り当てられていましたが、これによりエラーが発生します。だから私の質問は、条件やパラメータを使用する必要がありますか?モデルでこのタイプのことを行う必要がありますか、またはCriteriaまたはCActiveDataProviderのものを使用する必要がありますか?

誰かが私を正しい方向に向けてくれれば幸いです。私はいつもfindAll()を使用して取得しましたが、これを行うにはそれらがより良い方法であることを知っています。属性、条件、パラメータなどをいつ何を使用するかに関する一般的な情報もいいでしょう。

Yiiのドキュメントを読み、これらの質問に対する回答を求めて多数のサイトを検索しましたが、見つかりませんでした。

12
KyleVan

FindByAttributesでもparamsを使用することをお勧めしますが、それはマッチングのみを行います。 findAllを使用して条件ステートメントを追加すると、形式はすでに実行しているものと非常に似ています。

$model=Auction::model()->findAll(array(
    'condition'=>'status=:status AND starttime >= :date',
    'params'=>array(':status'=>1, ':date'=>$date),
));

非常に複雑なクエリを実行したり、プログラムでクエリを作成したりする場合は、findAllBySql、CDbConnection :: createCommand、または Query Builder を使用することをお勧めします。これは、アプリにとって何が最も理にかなっているかによって異なります。

データベースの操作 のYiiセクションを(再)読みますが、詳細な例はありませんが、かなり明確です。次に、Yiiブログチュートリアル、 Larry Ullmanのチュートリアル などを試すことができます。

20
ldg

findAllByAttributesの2番目のパラメーターのタイプは混合されているため、(無限ではありませんが)多くの可能性があります。次に例を示します。

$model = Auction::model()->findAllByAttributes(
    array(
      'status' => 1
    ), 
    'starttime >= :date', 
    array(
        'date'=>$date
    )
));

または

$model = Auction::model()->findAllByAttributes(
    array(
      'status' => 1
    ), 
    array(
      'condition' => 'starttime >= :date'
      'params' => array('date'=>$date)
    )
));
5