添加新的 属性 到 Eloquent Collection

Adding new property to Eloquent Collection

正在尝试向现有 collection 添加新的 属性 并访问它。

我需要的是:

$text = Text::find(1);  //Text model has properties- id,title,body,timestamps
$text->user = $user;

并通过 $text->user 访问用户。

探索文档和 SO,我发现 putprependsetAttribute 方法可以做到这一点。

$collection = collect();
$collection->put('a',1);
$collection->put('c',2);
echo $collection->c; //Error: Undefined property: Illuminate\Support\Collection::$c

再次,

$collection = collect();
$collection->prepend(1,'t');
echo $collection->t = 5; //Error: Undefined property: Illuminate\Support\Collection::$t

$collection = collect();
$collection->setAttribute('c',99); // Error: undefined method setAttribute
echo $collection->c;

有什么帮助吗?

我想你在这里 Eloquent collection 与支持 collection 混在一起。使用时还要注意:

$text = Text::find(1);  //Text model has properties- id,title,body,timestamps
$text->user = $user;

你这里没有collection,只有一个object。

但是让我们看看:

$collection = collect();
$collection->put('a',1);
echo $collection->c; //Error: Undefined property: Illuminate\Support\Collection::$c

您正在参加c,您没有这样的元素。你应该做的是像这样获取位于 a 键的元素:

echo $collection->get('a');

或者像这样使用数组访问:

echo $collection['a'];

另请注意 Collection 上没有 setAttribute 方法。 Eloquent 模型上有 setAttribute 方法。