豊住モンキー:
これは、データベースに配列を挿入については、すでにここに求められている質問から別の質問かもしれませんが、鉱山はかなり異なっています。
ここで、コードは次のとおりです。
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をユーザーによって入力された値は、データベースから元の値から同じであるかどうかを判断するために、値の差は、列名(取得theresの場合は$ diff_name、新しい値の挿入()とを$ diff_value)。私は履歴ログの目的のために$ diff_nameの値を必要としますので、私はそれをこのようにしました。しかし、私はこのエラーになっていますArray to string conversion
事前に感謝を。
Azeame:
あなたが実装することができることを雄弁方法でいくつか組み込まれているがあります。
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';
}
$モデル - > firstOrFail()
データベースから取得されなかったモデルを操作しようとするからエラーを防ぐために、実行を停止するために使用することができます。
$モデル - >塗りつぶし()
これは、アップデートしたい値の配列を渡すために使用することができます。
$要求 - >のみ([ '名前'、 '金])
代わりに配列を渡すの
$model->fill()
あなたも、これを使用することもできます。
$モデル - > getDirty()
属性(と、それを保存する前に)モデルを変更した後、あなたは、属性と変更されている対応する値の連想配列を取得するためにこれを使用することができます。