繁体   English   中英

如何将数组插入数据库? Laravel PHP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM