Laravel,如何将对象转换为新的Eloquent模型?

时间:2016-11-10 12:44:20

标签: laravel post eloquent

我通过Request获取Json对象。 我清楚地解析了这个对象,以检查它是否适合目标模型。

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

5 个答案:

答案 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();