gpt4 book ai didi

php - Laravel save() 方法未正确检测自定义主键

转载 作者:行者123 更新时间:2023-11-29 06:36:45 26 4
gpt4 key购买 nike

我正在尝试使用 Eloquent 的“save()”方法更新我的 MySQL 数据库中的现有条目,但它一直给我以下错误:

Illuminate \ Database \ QueryException
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry

save() 方法应该通过主键检测记录并更新记录而不是尝试插入它,对吗?我在这里错过了什么?

这是我的用户模型的开始:

class User extends Eloquent implements UserInterface, RemindableInterface {

use UserTrait, RemindableTrait;

/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';

protected $primaryKey = 'objectguid';

public $incrementing = false;

这就是我创建用户表的方式:(laravel 迁移)

    public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->string('objectguid')->primary();
$table->string('username');
$table->string('email');
$table->string('firstname');
$table->string('lastname');
$table->string('displayname');
$table->string('company');
$table->string('department');
$table->string('title');
$table->integer('phone');
$table->date('start_date');
$table->timestamps();
});
}

这是我的 Controller 方法:

public function pull()
{

$users = $this->ldap->search([
'objectguid', 'samaccountname', 'mail', 'title',
'sn', 'givenname', 'displayname', 'department',
'company', 'telephonenumber', 'whencreated'
])->get();

foreach($users as $user)
{

$user->save();

}
}

真正让我失望的是,如果我使用 User::find(objectguidofrecordhere),它会按预期工作并且发现记录没问题。

最佳答案

the save() method is supposed to detect the record via primary key and update the record instead of trying to insert it right?

我不相信保存方法是这样工作的。您需要查询一个模型以确定它是否存在,然后采取相应的行动:

$user = User::find(1234);

if ( is_null($user) ) {
// User doesn't exist
$user = new User();
}
$user->someAttribute = 'taco';
$user->save();

如果用户是null,那么它不存在于数据库中,你必须创建一个新对象。然后更新你想要的任何属性。然后保存。

据我所知,保存不会自动确定对象是否已经存在。如果这是一些隐藏的未记录的 Eloquent 功能,我可能是错的。

关于php - Laravel save() 方法未正确检测自定义主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24132569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com