Jhe*_*cht 1 laravel laravel-eloquent laravel-5.4
我正式使用了此功能-我无法全神贯注于我做错了什么。
我试图用来::firstOrNew检查记录的存在或为其创建对象实例。问题是,当我值传递给它,我知道是不是在数据库中,创建的后续机型绝对没有的属性设置就可以了。代码看起来像这样(修剪掉一些随机膨胀)
if($old_value != ''){
list($old_tag, $oldV) = explode(':', $old_value);
list($new_tag, $value) = explode(':', $new_value);
//Get the new tag / old tag, new value / old value
$tag = CdwTagging::firstOrNew(['tagging'=>$old_tag], [ 'value'=>$old_value, 'segment'=>$tag_section]);
if(!$tag->exists) {
//do some logical stuff based on other values, etc.
$tag->save();
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码基于Docs的This Link。
如果我在其中添加dd($tag)我的输出是:
我检查了一下我使用的数组是否真正保存了值(例如:也许我在收集数据时搞砸了),并且可以向您保证这些值正是通过表单发送的。
CdwTagging {#320
#table: "cdw_tagging"
#fillable: array:3 [
0 => "segment"
1 => "tagging"
2 => "value"
]
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: false
+wasRecentlyCreated: false
#attributes: []
#original: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [
0 => "*"
]
}
Run Code Online (Sandbox Code Playgroud)
如果我忽略了它并说“好吧,也许是因为它是新的,它还没有显示属性”,然后->save()无论如何都调用该方法,我会收到诸如以下的错误
SQLSTATE [HY000]:常规错误:1364字段“段”不具有默认值(SQL:插入到
cdw_tagging(updated_at,created_at)的值(2017年12月1日22时59分11秒,2017年12月1日22点59分: 11))
我觉得我在尝试使用此方法时一定做错了事,但是我必须很累或其他事情,因为我无法弄清楚是什么。感谢您的帮助或想法
模型的构造函数如下:
public function __construct(array $attributes = [])
Run Code Online (Sandbox Code Playgroud)
它具有属性。新实例在创建时可以填充属性,这就是发生的情况firstOrNew。
如果出于某种奇怪的原因决定不在构造函数中使用这些属性,那么当通过创建实例时,将不会将其分配给模型实例new Model($attributes)。
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |