2017-11-18 17 views
0

既存のコレクションに新しいプロパティを追加しようとしました。Eloquent Collectionに新しいプロパティを追加する

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

そして$text->user、を介してユーザにアクセス:私は必要なもの

のようなものです。

ドキュメントを調べると、私は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; 

任意のヘルプ?

答えて

0

ここでは、サポートコレクションとの間でEloquentコレクションを混在させると思います。

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

ここにはコレクションはありませんが、1つのオブジェクトのみがあります。

しかしさんは見てみましょう:

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

あなたはcを取っているし、あなたがそのような要素を持っていません。

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

または代わりに、このように配列アクセスを使用して:あなたがすべきことは、このようにaキーにある要素を取っている

echo $collection['a']; 

またコレクションにはsetAttribute方法はありません注意してください。 EloquentモデルにはsetAttributeメソッドがあります。

+0

あなたの答えをありがとう。 [OK]をクリックすると、 '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

関連する問題