我希望从我的数据库中获取自动增量ID并在我的控制器内调用。
' id' db中的主键是自动增量。
我试过了:
$id = $model->id;
$id = $model->find('id');
$id = $model->findByPK('id');
但价值是空白的,是否有任何建议让我获得正确的身份证明?
我需要id值的原因是因为我需要将id与其他值混合并保存到其他列中。
感谢。
答案 0 :(得分:4)
$newId = YourModel::find()->max('id') + 1;
答案 1 :(得分:2)
AUTO_INCREMENT是一个特殊值,可能与最后一条记录的ID不同。
假设您正在使用MySQL,您可以在phpMyAdmin中看到它的值。
所以你应该获得它的值,特别是当你依赖数据库的AUTO_INCREMENT时。
要插入一条记录,可以选择LAST_INSERT_ID()
。但我仍然不喜欢做三重操作(插入,读取ID,更新)。最好最小化I / O操作(读取AUTO_INCREMENT,插入)。
就我而言,我需要从Excel文档导入数据。当然,当性能很重要时,我不能依赖ActiveRecord模型。所以我使用batchInsert()命令。
我正在采用this answer来获取MySQL中的AUTO_INCREMENT值。
$lastModelId = Yii::$app->db->createCommand("
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'my_table'
")->queryScalar();
如果使用表格前缀:
$lastModelId = Yii::$app->db->createCommand("
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = :TableName
")->bindValues([
':TableName' => MyModel::getTableSchema()->name,
])->queryScalar();
答案 2 :(得分:0)
我找到了自己的aswer:
$max = Yii::app()->db->createCommand()->select('max(id) as max')->from('TABLENAME')->queryScalar();
$id = ($max + 1);
print_r($id);
感谢。
答案 3 :(得分:0)
最简单的方法是在保存记录后获取新ID。之后,您可以执行所需操作并再次保存。是这样的:
<?
$model = new YourModel;
$model->field1 = 'some value';
$model->field2 = 'some value 2';
//...
$model->save();
// now you have the new ID and you can use it
$id = $model->id;
// do what you need e.g.
$model->field3 = $field2 + $id;
$model->save();
?>
答案 4 :(得分:0)
这对我有用。
public static function getAutoIncrement($table_name)
{
$q = new Query();
$res = $q->select("AUTO_INCREMENT")
->from('INFORMATION_SCHEMA.TABLES')
->where("TABLE_SCHEMA = DATABASE() AND TABLE_NAME = '" . $table_name . "'")
->one();
if($res)
return $res["AUTO_INCREMENT"];
return false;
//or use this
//$q = "SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = '" . $table_name . "'";
//$auto_increment = Yii::$app->db->createCommand($q)->queryScalar();
//return $auto_increment;
}
答案 5 :(得分:-1)
你正在以错误的方式解决这个问题......
$model->id
如果你事先实例化了$ model,那么这是可用的:
$model = new Model();
$id = $model->id; //this will work if id is the exact name of the column in db
$model->find('id')
这会根据id找到DB中的元素,但语法错误,所以会引发错误
$model->findByPK('id')
再次......如果与主键匹配(在拨打此电话之前您应该拥有),则pk会从数据库返回一行
总之,我会建议第一种方法,但不要忘记首先实例化模型。否则,你可以做类似的事情......
$model = Model::model()->findByAttributes(array('some_attribute' => $attribute_value));
$id = $model->id;
希望这有帮助!
继续编码!
顷。