[SOLVED] CGridview를 필터링하기 위해 두 개의 ID 테이블을 하나의 세부 테이블과 비교해야합니다. 은 "상세"테이블이있다
는 세 가지 중요한 필드가 있습니다
1 - id of the detail row
2 - ID of an assigned PERSON
3 - ID of an assigned GROUP (of PERSONs)
만 사람이나 그룹이든이 할당 할 수 있습니다. 둘 다 지정할 수 없습니다. 그러나 동시에 그들 중 누구도 (개인, 그룹 또는 없음)
이되어야합니다. 그런 다음 PERSON 및 GROUP에 대한 ID 테이블이 두 개 있습니다. 기본 정보는 상세 정보에 링크되고 NAME은 NAME으로 정의됩니다.
내 CGridView에서 내가 이전에 설명 된 규칙 때문에 서로 충돌하지 않는다는 것을 알고 있기 때문에 GROUP과 PERSON을 하나의 필드에 추가하려고합니다. 충분히
array(
'header'=>'supp group/person',
'value'=>'(!$data->assignedSupportperson && !$data->assignedSupportgroup ?
"null" :
($data->assignedSupportperson ?
$data->assignedSupportperson->name :
$data->assignedSupportgroup->name
)
)',
),
간단하지만 어려운 부분은 내가이 칼럼에 필터를 추가 할 필요가 있다는 것입니다 :
열 배열에서 : 그래서 그 값이 나는 그런 같이에 있어요.
그래서 내 논리는 내 모델에서 $criteria->compare()
을 사용하여 두 ID 테이블을 DETAIL 테이블의 두 열과 비교합니다. 텍스트 필드 필터에 대한 ID 테이블을 참조하려면 $criteria->compare()
을 사용했습니다. 그래서 그것에 대한 지식이 있습니다.
하지만 누가 모델을 잘 조작 할 수있는 사람이 있다면, 분실했기 때문에 지식을 공유하십시오.
[ADDED 소스 코드] 그리드보기 ::
$model = new TicketDetail('search');
if (isset($_GET['TicketDetail'])) {
$model->attributes = $_GET['TicketDetail'];
}
$this->widget('bootstrap.widgets.TbGridView', array(
'id' => 'Assigned-Ticket-grid',
'dataProvider'=>$model->assignedToUser(Yii::app()->user->data()->id)->search(),
'template' => "{items}{pager}",
'htmlOptions'=>array(),
'itemsCssClass' => 'table table-striped table-bordered table-condensed',
'filter' => $model,
'columns' => array(
array(
'name' => 'id',
'header' => 'ID',
'headerHtmlOptions'=>array(
'width'=> 50,
),
),
array(
'header'=>'supp group/person',
'value'=>'$data->AssignedSupport?$data->AssignedSupport:"null"',
//'filter'=>$model, <----- heres where i tried a couple things.
'headerHtmlOptions'=>array(
'width'=>100
)
),
),
);
모델 :: 당신이 필터의 값을 검색 할 수 있어야한다는
public function getAssignedSupport()
{
return !$this->assignedSupportperson&&!$this->assignedSupportgroup?"null":$this->assignedSupportperson?$this->assignedSupportperson->name:$this->assignedSupportgroup->name);
}
가인가하지? 또는 나는 틀린 인상의 아래에서인가?
그래서 gridview를 통해 필터링하려고 시도하는 대신 이름 값이있는 필드가 있다는 생각을하게됩니다. 착시 필드를 통해 필터링하고 DB에서 오는 것처럼 작동합니다 ... 고맙습니다. 선생님 ... 아프다. 밖으로 시도해보고 어떻게되는지 알려주십시오. – Chris
필자는이 기능을 추가했으며 원하는 값을 추가하는 데는 완벽하게 작동했습니다.하지만 상단에는 필터 상자가 없습니다. gridview 헤더에서 필터에 추가 할 필요가있는 여분의 것이 있습니까 ?? 메신저 꽤 새로운 그래서 난 정말 도움을 주셔서 감사합니다 – Chris
그리드보기의 소스 코드를 공유 할 수 있을까요? – mcserep