Trying to add new property to existing collection and access that.
What I need is something like:
$text = Text::find(1); //Text model has properties- id,title,body,timestamps
$text->user = $user;
And access the user via, $text->user
.
Exploring on documentation and SO, I found put
, prepend
, setAttribute
methods to do that.
$collection = collect();
$collection->put('a',1);
$collection->put('c',2);
echo $collection->c; //Error: Undefined property: Illuminate\Support\Collection::$c
Again,
$collection = collect();
$collection->prepend(1,'t');
echo $collection->t = 5; //Error: Undefined property: Illuminate\Support\Collection::$t
And
$collection = collect();
$collection->setAttribute('c',99); // Error: undefined method setAttribute
echo $collection->c;
Any help?
I think you mix here Eloquent collection with Support collection. Also notice when you are using:
$text = Text::find(1); //Text model has properties- id,title,body,timestamps
$text->user = $user;
you don't have here any collection but only single object.
But let's look at:
$collection = collect();
$collection->put('a',1);
echo $collection->c; //Error: Undefined property: Illuminate\Support\Collection::$c
You are taking c
and you don't have such element. What you should do is taking element that is at a
key like this:
echo $collection->get('a');
or alternatively using array access like this:
echo $collection['a'];
Also notice there is no setAttribute
method on Collection. There is setAttribute
method on Eloquent model.