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

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

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);