ホームページ > バックエンド開発 > PHPチュートリアル > Yii における CGridView 関連テーブルの検索とソート方法の例の詳細な説明、yiicgridview_PHP チュートリアル

Yii における CGridView 関連テーブルの検索とソート方法の例の詳細な説明、yiicgridview_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:12:22
オリジナル
761 人が閲覧しました

Yii、yiicgridviewにおけるCGridView関連テーブルの検索・ソート方法の詳細例

この記事の例では、Yii での CGridView 関連テーブルの検索とソート方法を説明します。参考のためにみんなで共有してください。具体的な実装方法は以下の通りです

Yii CGridView での関連テーブルの検索とソートの実装方法は少し複雑ですが、今日は外国人が書いたゲームを読んで整理して友達に共有したいと思います。 Yii フレームワークを学習します。

まず、ブログ デモの protectedmodelsComment.php をチェックして、コメント モデルに検索メソッドがあることを確認します。ない場合は、gii を使用して生成します。ダウンロードしたブログ デモには検索メソッドがありません。

次に、コードを記述します。まず CommentController に actionList を追加します。

コードをコピーします コードは次のとおりです:
public function actionList()
{
$model=new コメント('検索');
$model->unsetAttributes();
If(isset($_GET['コメント']))
$model->attributes=$_GET['コメント'];

$this->render('リスト',array(
「モデル」=>$model,
));
}
これは特別なもののようには見えません。gii で生成した粗雑なコードと同じです。次に、ビューを作成して、/protected/views/comment/ ディレクトリに list.php を作成し、次のコードを貼り付けます


コードをコピーします コードは次のとおりです:
breadcrumbs=array(
「コメント」
);
?>

コメントを管理



widget('zii.widgets.grid.CGridView', array(
) 'dataProvider'=>$model->search(),
'フィルター'=>$model,
'列' => 配列(
「コンテンツ」、
'post.title',
「ステータス」、
「著者」
)、
));
?>
コメント一覧

コメントの「内容」「ステータス」「作成者」と記事のタイトルのみを表示する基本的なCGridViewです。このリストに記事タイトルの列を追加したいとします。post.title:

を追加するだけです。

コードをコピーします コードは次のとおりです:
'columns'=>array(
「コンテンツ」、
‘post.title’,
「ステータス」、
「著者」、
)、
次のページにアクセスすると、確かに記事のタイトルが表示されていることがわかります

質問:

このページをよく見てみると、記事のタイトルで検索できず、記事のタイトルで並べ替えることもできないことがわかります。これは、CGridView が指定された列名 (post.title) に「.」を見つけたためです。 。 ポイント。ドットがある場合、検索ボックスは生成されません。

解決策:

この問題を解決するには、私たちは一生懸命働かなければなりません。まず、Commen モデルにゲッターとセッターを追加する必要があります。例:


コードをコピーします コードは次のとおりです:
private $_postTitle = null;
パブリック関数 getPostTitle()
{
If ($this->_postTitle === null && $this->post !== null)
{
$this->postTitle = $this->post->title;
}
$this->_postTitle;
を返す }
パブリック関数 setPostTitle($value)
{
$this->_postTitle = $value;
}
次に、この属性をルール関数に追加します:


コードをコピーします コードは次のとおりです:
パブリック関数ルール()
{
// 注: ルールは、次の属性に対してのみ定義する必要があります
// ユーザー入力を受け取ります。
配列を返します(
array('コンテンツ, 著者, メールアドレス', '必須'),
array('作成者, メールアドレス, URL', '長さ',​​ '最大'=>128),
array('電子メール','電子メール'),
配列('url','url')

array('content, postTitle, status, author', 'safe', 'on'=>'search'),
);
}

これだけでは不十分です。最も変更する必要があるのは検索機能です。まず基準を追加する必要があります:

コードをコピーします コードは次のとおりです:
$criteria=new CDbCriteria;
$criteria->with = "post" // 必ず post テーブルをクエリします
;
$criteria->compare('t.content',$this->content,true);
$criteria->compare('t.status',$this->status);
$criteria->compare('t.author',$this->author,true);
$criteria->compare('post.title', $this->postTitle,true);

次に並べ替えを追加します:

コードをコピーします コードは次のとおりです:
$sort = new CSort();
$sort->attributes = array(
'defaultOrder'=>'t.create_time DESC',
'コンテンツ'=>配列(
'asc'=>'t.content',
'desc'=>'t.content desc',
)、
'ステータス'=>配列(
'asc'=>'t.status',
'desc'=>'t.status desc',
)、
'著者'=>配列(
'asc'=>'t.author',
'desc'=>'t.author desc',
)、
'postTitle'=>array(
'asc'=>'post.title',
'desc'=>'post.title desc',
)、
);

完全な 'tablename'.'columnname' 構文を使用していることに気づいたかもしれませんが、これを行う理由は、mysql が 'column is曖昧なエラー' をスローするのを避けるためです。

これが適切に動作するためには、CSort インスタンスと CDbCriteria インスタンスを CActiveDataProvider に渡す必要があります:

コードをコピー コードは次のとおりです:
return new CActiveDataProvider('Comment', array(
) '基準'=>$基準,
'並べ替え'=>$並べ替え
));

return new CActiveDataProvider('コメント', array(
) '基準'=>$基準,
'並べ替え'=>$並べ替え
));

あとは、CGridView に表示したいプロパティが表示されるようにビューを変更するだけです。

コードをコピーします コードは次のとおりです:
'columns'=>array(
「コンテンツ」、
'投稿タイトル',
「ステータス」、
「著者」、
)、

更新すると、効果は以下のようになります:

この記事が、Yii フレームワークに基づいた PHP プログラムの設計に役立つことを願っています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/920975.html技術記事 Yii、yiicgridviewにおけるCGridView関連テーブルの検索・ソート方法の詳細解説 この記事では、YiiにおけるCGridView関連テーブルの検索・ソート方法を例を用いて説明します。参考のためにみんなで共有してください。具体的な実装方法…
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート