我通过Request获取Json对象。 我清楚地解析了这个对象,以检查它是否适合目标模型。
而不是按属性分配属性。有没有快速的方法用传入的对象填充模型?
答案 0 :(得分:4)
如果您有一个数组数组,那么您可以使用hydrate()
方法将其强制转换为指定模型的集合:
$records = json_decode($apiResult, true);
SomeModel::hydrate($records);
如果您只有一条记录,那么您可以将该数组传递给模型的构造函数:
$model = new SomeModel($record);
答案 1 :(得分:3)
只需将您的对象作为模型构造函数参数
传递给数组$model = new Model((array) $object);
在内部,它使用fill()
方法,因此您可能首先需要将传入属性添加到$fillable
属性,或首先创建模型,然后使用forceFill()
。
答案 2 :(得分:1)
您应该将该对象转换为数组并使用fill($attributes)
方法。
正如方法名称所示,它将使用提供的值填充对象。请记住,它不会持久存储到数据库中,之后您必须触发save()
方法
或者,如果您想填写并坚持使用一种方法,那么create($attributes)
会在fill($attributes)
和save()
下运行。
答案 3 :(得分:1)
您可以使用Laravel的Mass Assignment功能,
你的模型看起来像这样:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'phone'];
}
填充模型的过程如下:
// This would be your received json data converted to array
// use 'json_decode($json, true)' to convert json data to array
$json_arr = [
'name' => 'User Name',
'email' => 'email@example.com',
'phone' => '9999999999'
];
$user = new \App\User($json_arr);
希望这有帮助!
答案 4 :(得分:-1)
铸件可能由于多种原因而失败。一种安全的方法是向模型添加一个静态函数,以便从数组或对象生成。感觉就像是模型的扩展。
public static function generateFromObject($object)
{
$myModel = new MyModel();
foreach($object as $k => $v)
$myModel->{$k} = $v; //for arrays $myModel[$k] = $v;
return $myModel;
}
你可以在任何地方使用,
$myModel = MyModel::generateFromObject($myObjectOrArray)->save();