Nemůžu v nette database spusti negaci dotazu klauzule where
- cvit84
- Člen | 43
Zdravím
mam zdrojový kod
public function findAllWhere($id){
return $this->db->table($this::TABLE)->where($this::ID_COLUMN_NAME,$id);
}
public function getStatesNot($id){
return $this->findAllWhere('NOT (id ?)', $id)->fetchPairs('id','state');
}
A potřebuju vypsat všechny řádky, které se nerovnají ID v parametru. Vrací mi to aktualně prázdné pole. A v databazi mám dvě položky.
Prosím o radu.
Děkuji
- Phalanx
- Člen | 310
<?php
// !=
$this->db->table($this::TABLE)->where("{$this::ID_COLUMN_NAME} != ?, $id)->fetchPairs('id','state');
// NOT IN(?)
$this->db->table($this::TABLE)->where("{$this::ID_COLUMN_NAME} NOT IN(?), $id)->fetchPairs('id','state');
?>
Místo ->where($this::ID_COLUMN_NAME,$id);
můžeš použít
->wherePrimary($id)
a z pravidla za to ještě chceš dát ->fetchAll()
, abys
získal výsledky.
Editoval Phalanx (30. 3. 2020 19:21)
- cvit84
- Člen | 43
Phalanx napsal(a):
<?php // != $this->db->table($this::TABLE)->where("{$this::ID_COLUMN_NAME} != ?, $id)->fetchPairs('id','state'); // NOT IN(?) $this->db->table($this::TABLE)->where("{$this::ID_COLUMN_NAME} NOT IN(?), $id)->fetchPairs('id','state'); ?>
Místo
->where($this::ID_COLUMN_NAME,$id);
můžeš použít->wherePrimary($id)
a z pravidla za to ještě chceš dát
->fetchAll()
, abys získal výsledky.
Pořád mi to hází prazdný pole.
tenhle kod tam teď cpu
public function getStatesNot($id){
return $this->findAllWhere('NOT IN(?)', $id)->fetchAll();
}
- Michal Hlávka
- Člen | 190
Nevim co ta funkce co volas v sobe ma, ale kdyz zavolas?
where(['id NOT IN' => [1, 2, 3]])
where('id NOT IN ?', [1, 2, 3]);
Editoval Michal Hlávka (30. 3. 2020 19:59)
- Phalanx
- Člen | 310
@cvit84 Pleteš několik věcí dohromady. Už jen to, že voláš
findAllWhere
se dvěma parametry a ona má jen jeden…
<?php
public function findById($id)
{
return $this->db->table($this::TABLE)->wherePrimary($id)->fetch();
}
public function getStatesNot($id)
{
return $this->db->table($this::TABLE)->where('id != ?', $id)->fetchPairs('id','state');
}
?>