Db::update()
\nn\t3::Db()->update($tableNameOrModel = '', $data = [], $uid = NULL);
Update database entry. Quick and easy. The update can be done either by table name and data array. Or you can pass a model.
Examples:
// UPDATES table SET title='new' WHERE uid=1
\nn\t3::Db()->update('table', ['title'=>'new'], 1);
// UPDATES table SET title='new' WHERE uid IN (1,2,3)
\nn\t3::Db()->update('table', ['title'=>'new'], ['uid'=>[1,2,3]);
// UPDATE table SET title='new' WHERE email='david@99grad.de' AND pid=12
\nn\t3::Db()->update('table', ['title'=>'new'], ['email'=>'david@99grad.de', 'pid'=>12, ...]);
Copied!
With true instead of a $uid ALL records of the table are updated.
// UPDATE table SET test='1' WHERE 1
\nn\t3::Db()->update('table', ['test'=>1], true);
Copied!
Instead of a table name, a simple model can also be passed. The repository is determined automatically and the model is persisted directly.
$model = $myRepo->findByUid(1);
\nn\t3::Db()->update( $model );
Copied!
@param mixed $tableNameOrModel
@param array $data
@param int $uid
@return mixed
Source Code
public function update ( $tableNameOrModel = '', $data = [], $uid = null )
{
if (\nn\t3::Obj()->isModel( $tableNameOrModel )) {
$persistenceManager = \nn\t3::injectClass( PersistenceManager::class );
$persistenceManager->update( $tableNameOrModel );
$persistenceManager->persistAll();
$this->fixFileReferencesForModel( $tableNameOrModel );
return $tableNameOrModel;
}
$queryBuilder = $this->getQueryBuilder( $tableNameOrModel );
$queryBuilder->getRestrictions()->removeAll();
$queryBuilder->update( $tableNameOrModel );
$data = $this->filterDataForTable( $data, $tableNameOrModel );
if (!$data) return false;
foreach ($data as $k=>$v) {
$queryBuilder->set( $k, $v );
}
if ($uid === null) {
$uid = $data['uid'] ?? null;
}
if ($uid !== true) {
if (is_numeric($uid)) {
$uid = ['uid' => $uid];
}
foreach ($uid as $k=>$v) {
if (is_array($v)) {
$v = $this->quote( $v );
$queryBuilder->andWhere(
$queryBuilder->expr()->in( $k, $queryBuilder->createNamedParameter($v, Connection::PARAM_STR_ARRAY) )
);
} else {
$queryBuilder->andWhere(
$queryBuilder->expr()->eq( $k, $queryBuilder->createNamedParameter($v) )
);
}
}
}
return $queryBuilder->executeStatement();
}
Copied!