2016-11-10 6 views
1

Я получаю через запрос Json Object. Я четко разбираю этот объект, чтобы проверить, может ли он соответствовать целевой модели.Laravel, как отличить объект от новой Eloquent Model?

Вместо того, чтобы назначать имущество по собственности. Есть ли быстрый способ заполнить модель входящим объектом?

+0

Мне нравятся все ответы. Я озадачен тем, что принять как «TheAnswer», поскольку все добавляют что-то интересное. :) – koalaok

+0

Думаю, вам стоит подождать, пока кто-нибудь подведет итог «Ответ»;) Или ... напишите сами! – Paul

ответ

1

Вы должны преобразовать этот объект в массив и использовать метод fill($attributes).

Как указывается в имени метода, он заполняет объект заданными значениями. Имейте в виду, что он не будет сохраняться в базе данных, после этого вы должны запустить метод save().
Или если вы хотите заполнить и сохранить в одном виде - есть create($attributes), который работает fill($attributes) и save() под капотом.

1

Просто передайте свой объект с приведением в массив в качестве аргумента конструктора модели

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

Внутренне это использует fill() метод, так что вы можете в первую очередь необходимо добавить входящие атрибуты $fillable собственности или сначала создать модель, а затем использовать forceFill().

1

Вы можете использовать Mass Assignment особенность Laravel,

вас модель будет выглядеть следующим образом:

<?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); 
Смежные вопросы