Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Manually add item to existing object [Laravel 5]

Here is what I try to do:

$q = Question::where('id',$id -> id)->get();
$q[] = $q->push([ 'test' => true]); 
dd($q);

This will output:

Collection {#220 ▼
  #items: array:3 [▼
    0 => Question {#225 ▶}
    1 => array:1 [▼
      "test" => true
    ]
    2 => null
  ]
}

So 'test' => true will append as a new key, but I want to insert it in Question so latter I can access to it like this with foreach $q -> test

So here is how I want access to item:

@foreach($q as $qq)
{{ $qq->test }}
@endforeach
like image 488
Vladimir Djukic Avatar asked Jul 17 '15 11:07

Vladimir Djukic


2 Answers

It can be done by using setAttribute() function of Eloquent Model (https://github.com/illuminate/database/blob/master/Eloquent/Model.php).
As You can see it stores data in protected $attributes using setAttribute(), and when we do $SomeModel->some_field it uses magic method __get() to retrieve item by association from attributes array.

Here is the resolution to Your question:

$Question = Question::find($id);
$Question->setAttribute('test', 'blablabla');
like image 73
num8er Avatar answered Sep 21 '22 20:09

num8er


Apart from setAttribute(), you can use put() refer to this post for one item. And map() for many items, refer to this post.

like image 41
LF00 Avatar answered Sep 20 '22 20:09

LF00