出席者、イベント、場所の 3 つのエンティティがあり、すべての出席者に 1 つのイベントがあり、すべてのイベントに 1 つの場所があります - 出席者の 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
列として表示されますが、並べ替えも検索もできません。どうすればこれを達成できますか?