Jak správně zapsat syntaxi pro WhereOr
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- Dvory59
 - Člen | 40
 
Ahoj, potřeboval bych prosím poradit se zápisem WhereOr.
Chtěl bych updatovat jeden sloupec v tabulce, ale pro víc řádků. Řádky
identifikuju podle ID, který mám v poli $array.
Teď to mám takto šložitě, kde si ty where podmínky vytvořím pomocí foreach do stringu a ten pak předám přímo do query požadavku :
$string = "(";
foreach ($array as $id)
			{
				if ($i != $arrayLength - 1)
				{
					$string = $idx . '' . 'id = ' . $id . ' OR ';
				}
				else
				{
					$string = $idx . '' . 'id = ' . $id.')';
				}
				$i++;
			}
			$this->database->query('UPDATE projects SET status = '.$status.' WHERE '.$string);
Poradí mi prosím někdo jak to zapsat pomocí WhereOr nějak jednodušeji? Já na to nemůžu přijít.
Díky moc

- David Matějka
 - Moderator | 6445
 
ahoj,
1. nikdy neprilepuj do SQL dynamicke hodnoty, pouzivej vzdy parametry.
$idx je predpokladam chyba a ma tam byt $string, takze
by to mohlo vypadat takhle:
$parameters = [];
$parameters[] = $status;
$string = "(";
foreach ($array as $id)
{
	$parameters[] = $id;
	if ($i != $arrayLength - 1)
	{
		$string .= 'id = ? OR ';
	} else {
		$string .= 'id = ?)';
	}
	$i++;
}
$this->database->queryArgs('UPDATE projects SET status = ? WHERE ' . $string, $parameters);
2. pro slepovani te podminky je lepsi pouzit implode:
$parameters = [];
$parameters[] = $status;
$or = [];
$string = "(";
foreach ($array as $id)
{
	$parameters[] = $id;
	$or[] = 'id = ?';
}
$string = '(' . implode(' OR ', $or) . ')';
$this->database->queryArgs('UPDATE projects SET status = ? WHERE ' . $string, $parameters);
3. no ale vzhledem k tomu, ze hledas vlastne IN operator, tak
to muzes zjednodusit na:
$this->database->query('UPDATE projects SET status = ? WHERE id IN(?) ', $status, $array);