将新属性添加到Eloquent Collection

时间:2017-11-18 09:18:26

标签: laravel laravel-5 eloquent laravel-5.2 laravel-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;

有任何帮助吗?

1 个答案:

答案 0 :(得分:1)

我认为你在这里混合了Eloquent系列和支持系列。使用时请注意:

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

你在这里没有收藏但只有一个对象。

但是,让我们来看看:

$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方法。