2016-11-10 42 views
1

我通过请求一个Json对象。 我明确解析这个对象,以检查它是否适合目标模型。Laravel,如何投掷对象到新的雄辩模型?

而不是按属性分配属性。有没有一种快速的方法来填充传入对象的模型?

+0

我喜欢所有答案我很困惑接受为“TheAnswer”,因为每个人都在添加一些有趣的内容。 :) – koalaok

+0

我想你必须等待某人把它总结成“答案”;)或者..自己写! – Paul

回答

1

您应该将该对象转换为数组并使用fill($attributes)方法。

如方法名称所示,它将填充提供的值的对象。请记住,它不会持续到数据库,你必须在此之后触发save()方法。
或者,如果您想要填写并坚持一种方法 - 有create($attributes),其中运行fill($attributes)save()

1

只是通过一个转换到数组作为模型构造函数参数的对象

$model = new Model((array) $object); 

在内部使用这个方法fill(),所以你可能需要先进入的属性添加到$fillable财产或首先创建模型,然后使用forceFill()

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 protected]', 
    'phone' => '9999999999' 
]; 
$user = App\User::create($json_arr); 

希望这有助于!

1

如果你有一个数组的数组,然后你可以使用hydrate()方法将其转换为指定的模型的集合:

$records = json_decode($apiResult, true); 

SomeModel::hydrate($records); 

如果你只是有一个单一的记录,那么你就可以只需将该阵列传递给模型的构造函数:

$model = new SomeModel($record);