2017-11-18 138 views
0

試圖向現有集合添加新屬性並訪問該屬性。將新屬性添加到Eloquent Collection

我需要的是這樣的:

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

並獲得通過,$text->user用戶。

探索文檔和SO,我發現put, prepend, setAttribute方法做到這一點。

$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; 

任何幫助嗎?

回答

0

我想你在這裏混合雄辯收集與支持收集。另請注意,您在使用時:

$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']; 

還要注意有館藏沒有setAttribute方法。在Eloquent模型上有setAttribute方法。

+0

感謝您的回答。好的,laravel文檔告訴,像'all'或'get'這樣的查詢會返回'Illuminate \ Database \ Eloquent \ Collection'的實例。那麼不應該使用'setAttribute'方法?我更新了「使用put方法」的例子。 – MASh

+0

不,setAttribute可用於單個模型,並且您不在此處使用'get'或'all'來獲取模型。如果你想擁有你可以使用的模型集合:'$ text = Text :: where('id',1) - > get();'現在你在'$ text [0]'中有第一個模型,但顯然當你用id來查看時,收集結果沒有任何意義,因爲你只有這個id的單個元素。 –

+0

得到了我想念的一點。接受你的答案。謝謝你的努力。 – MASh