[英]How to insert Array to Database using firstOrCreate in Laravel?
[英]How to insert array into database? Laravel Php
这可能与这里已经提出的关于将数组插入数据库的问题不同,但我的却大不相同。
这是代码:
public function something(Request $request)
{
$id = $request ->id;
$name = $request->name;
$money = $request ->money;
$data = array(
'name' => $name,
'money' => $money,
);
$z = User::where('id',$id)
->select('name','money')
->first();
$data2 = array(
'name' => $z->name,
'money' => $z->money,
);
$diff = array_diff($data,$data2);
$diff_name = array_keys($diff);
$diff_values = array_values($diff);
for ($i = 0; $i < count($diff_name); $i++) {
$z->$diff_name[$i] = $diff_values[$i];
$z->save();
}
return 'Success';
}
模型:
class User extends Model
{
protected $table = 'users';
protected $fillable = ['name','money'];
public $timestamps = false;
}
$data:
array(2) { ["name"]=> string(9) "Somewhere" ["money"]=> string(7) "5123.00"}
$data2:
array(2) { ["name"]=> string(8) "Anywhere" ["money"]=> string(7) "5000.00"}
所以我使用array_diff来确定用户输入的值是否与数据库中的原始值相等,如果值存在差异,则获取列名( $diff_name ),然后插入新值( $diff_value )。 我这样做是因为我将需要 $diff_name 的值用于历史记录。 但是我收到此错误Array to string conversion
提前致谢。
您可以实现几个内置的 Eloquent 方法。
public function something(Request $request)
{
$z = User::where('id',$request->id)
->select('name','money')
->first(); // You could also use '->firstOrFail()' if you want to stop execution if a model was not retrieved.
$z->fill([
'name' => $request->name,
'money' => $request->money,
]);
$diff = array_keys($z->getDirty());
$z->save()'
return 'Success';
}
$model->firstOrFail()
可用于停止执行以防止错误尝试操作未从数据库检索到的模型。
$model->fill()
这可用于传递要更新的值数组。
$request->only(['name','money])
您也可以使用它,而不是将数组传递给
$model->fill()
。
$model->getDirty()
更改模型属性后(并在保存之前),您可以使用它来获取已更改的属性和相应值的关联数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.