/**
* @param string $modelClass className
* @param mixed $condition
* @return int
*/
public function delete($modelClass, $condition)
{
$columns = [];
if ($condition !== null) {
$condition = $this->buildCondition($condition, $columns);
} else {
$condition = 'true';
}
$key = $this->quoteValue($modelClass::keyPrefix());
$recordKey = $this->quoteValue($modelClass::keyPrefix() . ':a:');
return <<<EOF
local allpks=redis.call('LRANGE',$key,0,-1)
local count=0
for k,pk in ipairs(allpks) do
if $condition then
redis.call('LREM', $key, 0, pk)
count=count+redis.call('DEL', $recordKey .. pk)
end
end
return count
EOF;
}
\yii\redis\ActiveRecord
/**
* Deletes rows in the table using the provided conditions.
* WARNING: If you do not specify any condition, this method will delete ALL rows in the table.
*
* For example, to delete all customers whose status is 3:
*
* ~~~
* Customer::deleteAll(['status' => 3]);
* ~~~
*
* @param array $condition the conditions that will be put in the WHERE part of the DELETE SQL.
* Please refer to [[ActiveQuery::where()]] on how to specify this parameter.
* @return int the number of rows deleted
*/
public static function deleteAll($condition = null)
{
$db = static::getDb();
$script = $db->getLuaScriptBuilder()->delete(static::class, $condition);
return $db->executeCommand('EVAL', [$script, 0]);
}
What steps will reproduce the problem?
add Data change primaryKey deleteAll()
What's expected?
Expected the find()->all() is empty but,calling find()->all() the data is still
What do you get instead?
Refactoring deleteAll() \yii\redis\LuaScriptBuilder
\yii\redis\ActiveRecord
Additional info