给定 3 个实体参加者、活动、位置,其中每个参加者都有一个活动,每个活动都有一个位置 - 如何在参加者的 GridView 中显示位置列的可排序和可搜索名称?
架构
CREATE TABLE `attendee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`eventId` int(11) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_attendee_event` FOREIGN KEY (`eventId`) REFERENCES `event` (`id`))
CREATE TABLE `event` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`locationId` int(11) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_e_l` FOREIGN KEY (`locationId`) REFERENCES `location` (`id`))
CREATE TABLE `location` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL)
我用 gii 生成了模型和 crud。
我希望与会者的 GridView 中的位置名称是可排序和可搜索的。
我想我必须通过事件定义与会者和位置之间的关系:
public function getLocation()
{
return $this->hasOne(Location::className(), ['id' => 'locationId'])->via('event');
}
在 _columns.php 我添加location.name
为列:
[
'class'=>'\kartik\grid\DataColumn',
'attribute'=>'location',
'value' => 'location.name'
],
location.name
显示为一列,但不可排序也不可搜索。我如何实现这一目标?