Nemůžu v nette database spusti negaci dotazu klauzule where

cvit84
Člen | 43
+
0
-

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
+
-2
-
<?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
+
0
-

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
+
0
-

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)

cvit84
Člen | 43
+
0
-

Nějak to pořád nechodí. Vrací mi to pořád prazdné pole. Zítra na to kouknu a jestli to opravím tak Vám dám vědět.

Děkuji moc za rady.

Phalanx
Člen | 310
+
0
-

@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');
}
?>