Php Laravel:静态::创建vs DB:插入
如果我在模型中使用以下代码段,它将插入数据:Php Laravel:静态::创建vs DB:插入,php,database,laravel,eloquent,Php,Database,Laravel,Eloquent,如果我在模型中使用以下代码段,它将插入数据: $instance = DB::table('users')->insert(compact('email', 'username')); 但如果我这样做: $instance = static::create(compact('email', 'username')); 它插入空值,但插入创建的和更新的。Laravel的创建的/更新的是照明\数据库\雄辩\模型的一部分。原始的DB::table查询生成器不是一个有说服力的模型,因此没有那些
$instance = DB::table('users')->insert(compact('email', 'username'));
但如果我这样做:
$instance = static::create(compact('email', 'username'));
它插入空值,但插入创建的和更新的。Laravel的
创建的
/更新的
是照明\数据库\雄辩\模型
的一部分。原始的DB::table
查询生成器不是一个有说服力的模型,因此没有那些自动参数
NULL
数据正在插入到Eloquent查询中,因为Eloquent有一个需要定义的$filleble
参数。此参数设置可以为哪些列指定体量。当您执行填充
,创建
,或以其他方式实例化新对象时,Laravel会剥离不在此数组中的属性。在您的模型中,您需要:
class User extends Eloquent {
protected $fillable = ['email', 'username'];
}
ceejayoz的回答很好,下面是如何调用模型的解释。一旦创建了模型,我们假设该模型:
class User extends Eloquent {
protected $fillable = ['email', 'username'];
}
然后,您需要直接使用模型和雄辩的ORM调用,如下所示:
// example is this. True method is TableName->ColumnName = Value;
$user = User::find($id);
$user->username = '';
$user->fullname = '';
$user->save();
保存将根据您描述的内容更新列。有了它,您甚至不需要可填充变量
模型的一些其他变量是:
protected $primaryKey = 'userid'; #if you have an primarykey that isn't named id
protected $table = 'tablename'; #if table name isn't pulling by the name of the model
protected $timestamps = true; #bool value, whether u have timestamp columns in table
你说你做了什么
class User extends Eloquent {
protected $fillable = ['email', 'username'];
}
但是,在您的评论中,您告诉我们您的apache日志中有以下错误
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ''
for key 'users_email_unique' (SQL: insert into ``users
(updated_at, created_at``) values (2015-01-06 21:52:35, 2015-01-06 21:52:35))
如果要设置可填充数组,请确保将users\u email\u unique
包含在可填充数组中
class User extends Eloquent {
protected $fillable = ['email', 'username', 'users_email_unique'];
}
你能告诉我们完整的方法(其中是$email,$username)吗当然,公共静态函数存储($email,$username){$instance=static::create(compact('email,'username'));}对于DB和Elotent way都是相同的方法。如果你想用一个
Medel::xxx
命令添加多行,那么你必须使用::insert($data)
对不起,我没有在上面的代码片段中包含这一点。但是我有一个受保护的$fillable=['email','username'];如果您执行User::create(['email'=>$email,'username'=>$username])
而不是compact
调用,它是否有效?您在apache2/error.log
中没有收到任何错误,并且您在LaravelOne上启用了调试模式,这是我从laravel获得的唯一“错误”:SQLSTATE[23000]:完整性约束冲突:1062关键“用户”的重复条目“”\u电子邮件\u唯一”(SQL:插入到``用户
(在
更新,在``创建)值(2015-01-06 21:52:352015-01-06 21:52:35))
@Prezioso如果$email
为空,或者该属性被可填充功能过滤掉,则会得到该属性。执行dd($email)
并查看它是否与您认为的匹配。users\u email\u uniquein
是MySQLUNIQUE
键的名称。它不是列名。