2016-12-26 2 views
0

Мне нужно обновить предметы по определенному заказу с помощью Eloquent. У меня есть эти модели:Laravel 5.3: Eloquent hasMany update

class Orders extends \Illuminate\Database\Eloquent\Model 
{ 

    public $timestamps = false; 

    protected $fillable = ['items_array']; 

    public function items() 
    { 
     return $this->hasMany(Items::class, 'order_id', 'order_id'); 
    } 

    public function setItemsArrayAttribute($data) 
    { 
     $this->items()->whereIn('article_id', array_map(function($item){ 
      return $item['article_id']; 
     }, $data['items']))->update($data); 
    } 

} 

class Items extends \Illuminate\Database\Eloquent\Model 
{ 
    protected $table = 'order_to_items'; 

    public $timestamps = false; 

    protected $fillable = ['internal_code']; 

    public function order() 
    { 
     return $this->belongsTo(Orders::class, 'order_id', 'order_id'); 
    } 
} 

у меня есть ответ апи подобное:

$response = [ 
    'message'=>'some', 
    'order_id'=>'111-222-333', 
    'items'=>[ 
     [ 
      'article_id' => 'R-320108', 
      'internal_code' => 333 
     ], 
     [ 
      'article_id' => 'R-320116', 
      'internal_code' => 444 
     ], 

    ] 
]; 

Так что я сделать это

$order = Orders::where('order_id', $response['order_id'])->with('items')->first(); 

, и я пытался сделать это:

$order->update([ 
    'is_sent' => true, 
    'items_array' => $response['items'] 
]); 

bu t, что не работает. Есть ли способ сопоставить связанную модель с ответом API и сделать обновление?

Спасибо!

+0

Есть ли какие-либо конкретные ошибки и, пожалуйста, ваш DB схемы? –

ответ

0

Вы можете использовать save():

$order->is_sent = true; 
$order->items_array = $response['items']; 
$order->save(); 

Или update():

$order = Orders::where('order_id', $response['order_id']) 
       ->update([ 
        'is_sent' => true, 
        'items_array' => $response['items'] 
       ]); 
+0

не работает, потому что в массиве $ response ['items'] есть два элемента. Может быть функция функции соответствия – Toletov

+0

@Toletov в этом случае просто перебирает элементы и обновляет каждый элемент. –

+0

http://stackoverflow.com/questions/43109293/updateing-one-to-many-relation-in-laravel-5-3 вот ссылка на вопрос, пожалуйста, можете ли вы мне помочь? –

Смежные вопросы