Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:静态::创建vs DB:插入_Php_Database_Laravel_Eloquent - Fatal编程技术网

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
是MySQL
UNIQUE
键的名称。它不是列名。