Witam
Problem taki jest:
tworze trzy tabele w relacjach jak poniżej
CREATE TABLE IF NOT EXISTS `tbl_promocja` (
`id_promocja` INT NOT NULL AUTO_INCREMENT ,
`id_produkty` INT NOT NULL ,
`stara_cena` DECIMAL(5,2) NULL ,
`nowa_cena` DECIMAL(5,2) NULL ,
`nowosc` TINYINT(1) NULL ,
`aktywna` TINYINT(1) NULL ,
PRIMARY KEY (`id_promocja`) ,
INDEX `fk_tbl_promocja_tbl_produkty1` (`id_produkty` ASC) ,
CONSTRAINT `fk_tbl_promocja_tbl_produkty1`
FOREIGN KEY (`id_produkty` )
REFERENCES `tbl_produkty` (`id_produkty` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `tbl_produkty` (
`id_produkty` INT NOT NULL AUTO_INCREMENT ,
`id_dzial` INT NOT NULL ,
`nazwa` VARCHAR(45) NULL ,
`ref` VARCHAR(45) NULL ,
`opis` TEXT NULL ,
PRIMARY KEY (`id_produkty`) ,
INDEX `fk_tbl_produkty_tbl_dzial1` (`id_dzial` ASC) ,
CONSTRAINT `fk_tbl_produkty_tbl_dzial1`
FOREIGN KEY (`id_dzial` )
REFERENCES `tbl_dzial` (`id_dzial` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `tbl_dzial` (
`id_dzial` INT NOT NULL AUTO_INCREMENT ,
`nazwa` VARCHAR(45) NULL ,
`opis` TEXT NULL ,
PRIMARY KEY (`id_dzial`) )
ENGINE = InnoDB
jak i czy wogole moge w gridView zrobic sortowanie wynikow promocji ale po nazwie działu produktu tej promocji. troche to zagmatwane ale postaram sie to jakos opisac:
search modelu PromocjaSearch wyglada tak:
public function search($params) {
$query = Promocja::find();
//lacze tabele produkty
$query->joinWith('produkty');
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
// teraz moge sortowac wyniki po nazwie produktu
$dataProvider->sort->attributes['produkty'] = [
'asc' => ['tbl_produkty.nazwa' => SORT_ASC],
'desc' => ['tbl_produkty.nazwa' => SORT_DESC],
];
// chcialem sie dostac do nazwy dzialu produktu w promocji
//niestety moge sortowac tylko po id_dzialu to dziala
$dataProvider->sort->attributes['dzial'] = [
'asc' => ['tbl_produkty.id_dzial' => SORT_ASC],
'desc' => ['tbl_produkty.id_dzial' => SORT_DESC],
];
//to juz nie dziala
// $dataProvider->sort->attributes['dzial'] = [
// 'asc' => ['tbl_produkty.id_dzial.nazwa' => SORT_ASC],
// 'desc' => ['tbl_produkty.id_dzial.nazwa' => SORT_DESC],
// ];
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere([
'id_promocja' => $this->id_promocja,
'id_produkty' => $this->id_produkty,
'stara_cena' => $this->stara_cena,
'nowa_cena' => $this->nowa_cena,
'nowosc' => $this->nowosc,
'aktywna' => $this->aktywna,
]);
$query->andFilterWhere(['like', 'tbl_produkty.nazwa', $this->produkty]);
return $dataProvider;
}