Select where+and+or při použití ID

- Koupilsemto
 - Člen | 38
 
Dobrý den, omlouvám se že zase píší ale mám problém sestavit tento
dotaz se kterým se trápím okolo 3 hodin. Nejspíše někde dělám špatně
čárku nebo závorku.
SELECT * FROM log WHERE ID_users =‚9‘ AND akce
=‚Připravena k vyzvednutí‘ OR ID_users =‚9‘ AND akce
=‚Rezervováno‘
Podařilo se mi vytvořit… to je však spatně.
    public function renderStavobjednavka($strana = 1) {
        $this->template->strana = $strana;
        $this->template->log = $this->database->table('log')
                ->where($this->user->getId())
                ->where('akce = ? OR akce = ?','Připravena k vyzvednutí', 'Rezervováno')
                ->page($strana, 20)
                ->order('akce ASC');
    }
Nažím se vytvořit neco jako ->where($this->user->getId() AND ‚akce = ?,'Připravena k vyzvednutí‘ OR ‚ID_users = ?‘,‚9‘ AND ‚akce = ?,'Rezervováno‘) a podle dokumentace se mi to moc nedaří :(
Editoval Koupilsemto (7. 5. 2018 18:07)

- kiCkZ
 - Člen | 153
 
Začal bych první chybou a to je pracovat s databází v presenteru, tato vrstva by měla být oddělena v modelu.
Následně bys mohl tento dotaz udělat takto:
$this->database->table('log')->where('user_id', $userId)->where('akce ? OR akce ?','Připravena k vyzvednutí', 'Rezervováno')->page($strana, 20)->order('akce');
				
- Koupilsemto
 - Člen | 38
 
Díky za reakci a tu práci s databázi se pokusím předělat. Bohužel ten
dotaz je něco jiného než bych potřeboval:
SELECT * FROM log WHERE ID_users =‚9‘ AND akce =‚Připravena
k vyzvednutí‘ OR akce =‚Rezervováno‘; tohle skončí tak že
to najde ID kde je Pripravené… nebo vše kde je Rezervováno. Potřebuji
najdi ID kde je 9 a akce je Rezervovano NEBO kde je ID 9 a akce
Pripraveno.
Editoval Koupilsemto (7. 5. 2018 18:48)

- kiCkZ
 - Člen | 153
 
Koupilsemto napsal(a):
Díky za reakci a tu práci s databázi se pokusím předělat. Bohužel ten dotaz je něco jiného než bych potřeboval:
SELECT * FROM log WHERE ID_users =‚9‘ AND akce =‚Připravena k vyzvednutí‘ OR akce =‚Rezervováno‘; tohle skončí tak že to najde ID kde je Pripravené… nebo vše kde je Rezervováno. Potřebuji najdi ID kde je 9 a akce je Rezervovano NEBO kde je ID 9 a akce Pripraveno.
Pokud jsem to pochopil správně, tak chceš dotaz, kde je jasně dané user_id = 9 ?
$this->database->table('log')->where('user_id', 9)->where('akce', ['Připravena k vyzvednutí', 'Rezervováno'])->page($strana, 20)->order('akce');
					Editoval kiCkZ (7. 5. 2018 19:07)

- Koupilsemto
 - Člen | 38
 
Jo jo chápeš dobře ale místo ID 9(bylo jen jako příklad) potřebují
zobrazovat pro aktuálně přihlášeného pomocí
($this->user->getId()) a to se mi nedaří. A pokud
fungují podmínky že chci Rezervované nebo připravené tak mi nejde
podmínka aby to byla aktuálně přihlášená ID
Editoval Koupilsemto (7. 5. 2018 19:19)

- kiCkZ
 - Člen | 153
 
Koupilsemto napsal(a):
Jo jo chápeš dobře ale místo ID 9(bylo jen jako příklad) potřebují zobrazovat pro aktuálně přihlášeného pomocí
($this->user->getId()) a to se mi nedaří
Právě proto si vytvoř model, ve kterém napíšeš metodu na vytáhnutí dat z DB a jako parametr budeš předávat to ID aktuálně přihlášeného uživatele, proto jsem ti ten první dotaz psal s proměnnou $userId.
public function nazev_funkce($userId) // zde máš předávat ID aktuálně přihlášeného uživatele
{
	return $this->database->table('log')->where('user_id', $userId)->where('akce', ['Připravena k vyzvednutí', 'Rezervováno'])->page($strana, 20)->order('akce');
}
					Editoval kiCkZ (7. 5. 2018 19:23)

- Koupilsemto
 - Člen | 38
 
Promin jsem amatér. Bohužel nevím jak předat ID aktuálně přihlášeného do $userId ale s $userId=‚neco‘ funguji podmínky na 100%.

- kiCkZ
 - Člen | 153
 
Koupilsemto napsal(a):
Promin jsem amatér. Bohužel nevím jak předat ID aktuálně přihlášeného do $userId ale s $userId=‚neco‘ funguji podmínky na 100%.
V pořádku i já jsem dost začátečník, nicméně postupně se určitě dostaneš dál.
Mrkni se na tento příklad: https://forum.nette.org/…senterom-atd#…
A v tomto příkladu máš presenter a metodu, která předaná data zobrazí (render):
    public function renderDefault() {
        $this->template->data = $this->model->mojeMetoda($this->user->id); // zde předáš ID
    }
A poté v modelu (MujModel), kde je metoda (mojeMetoda) nastavíš, aby funkce přijala nějaký parametr
public function mojeMetoda($userId) {
       return $this->database->table('log')->where('user_id', $userId)->where('akce', ['Připravena k vyzvednutí', 'Rezervováno'])->page($strana, 20)->order('akce');
}
Pokud nemáš žádné zkušenosti s tím, jak nastavit parametr do metod, tak bych spíše začal základy a poté přešel na OOP a až následně na framework, aby si aspoň tušil, jakým způsobem se dá s PHP pracovat.
Editoval kiCkZ (7. 5. 2018 20:36)

- Koupilsemto
 - Člen | 38
 
Tak to je bomba!!! ani nevíš jak jsi mi pomohl a konečně mi pár věcí došlo :D moc díky za trpělivost. Dám sem ukázku třeba někomu také pomůže + popis.
- Zalozit MujModel.php v app/model a vytvořit metodu
 
<?php
class MujModel {
    public $database;
	public function __construct(Nette\Database\Context $database)
	{
		$this->database = $database;
	}
    public function mojeMetoda($userId) {
        return $this->database->table('log')
                ->where('ID_users', $userId)
                ->where('akce', ['Připravena k vyzvednutí', 'Rezervováno'])
                ->order('akce');}}
- Přidat model do service v config.neon jinak skončí chybou model not found
 
services:
	- MujModel
- Vytvoritořit v presenteru (v mém případě) KnihyinfoPresenter.php renderování a přidat public $model; pred metodu render jinak skonči chybou Cannot read an undeclared property
 
class KnihyinfoPresenter extends Nette\Application\UI\Presenter {
	public $model;
    public function renderStavobjednavka() {
        $this->template->log = $this->model->mojeMetoda($this->user->id);
}
- a pak samozřejmě latte…
 
Je docela možné že to není 100% jak by mělo být proto to berte jako
inspiraci jelikož jsem amater. Ale funguje to!
A moc díky KiCkZ i CzechBoy za pomoc jsem o něco chytřejší.
Editoval Koupilsemto (8. 5. 2018 0:39)