2017-08-18 5 views
0

Laravelリポジトリ内の定義アクセサーを熱心にロードできるかどうかを知りたかっただけです。私は現在、このl5-repositoryパッケージとLaravel 5.4を使用しています。私UserInfo.phpモデルでLaravelリポジトリeagle load定義済みアクセッサー

、私は、私はこのように私のコントローラでアクセサ熱心な負荷にしようとしています。この機能に

public function getFullNameAttribute() 
{ 
    return ucfirst($this->first_name . " ". $this->last_name); 
} 

を持っています。

$user_infos = $this->repository->with('full_name')->all(); 
// or $user_infos = $this->repository->with('getFullNameAttribute')->all(); 
return response()->json([ 'data' => $user_infos ]); 

私はそれが動作しないことを知っています。私はちょうど私のアクセサリーを追加する同様の方法を探していますfull_name私のコレクションに。だから私はフロントエンドで連結する必要はありません。だから私の予想結果は、あなたのモデルに

{ 
    id : 1, 
    first_name : "Sample fname", 
    last_name : "Sample lname", 
    ..... 
    ..... 
    full_name : "Sample fname Sample lname", 
} 
+0

あなたの状況によって、熱心な読み込みのロジックが異なります。リレーションシップに使用されます。この例では、リレーションシップを使用する意味がありません。 – MisaGH

+0

また、アクセサであなたのコレクションで利用可能になり、あなたはそれを使用することができます。しかし、別のコレクションを作成したい場合は、これをループして手動で挿入することができます。 – MisaGH

+0

問題は、コントローラ上でそのコレクションをループするときだけ 'full_name'を得ることができるということです。フロントエンド(JS)でアクセスできません。 Theres私の質問の更新私は 'return response() - > json(['data' => $ user_infos]); 'を追加しました –

答えて

1

使用$appendsだろうUserInfo.php

protected $appends = ['full_name']; 

これはあなたのコレクションにこのカスタムフィールドを追加します。

次に、あなたはここでそれを見ることができます:あなたは、JSONでの追加アクセサを見ることができます

$user_infos = UserInfo::all(); 
$user_infos->toJson(); 

+0

ニース。どうもありがとうございました。これは良い練習ですか? –

+0

個人的に私はアクセサを使用するのは好きではありません。私はそれを別のメソッドに抽出し、コレクションにアクセスしてアクセスしたいと思います。しかし、あなたが好きなら、あなたはそれをすることができます。 – MisaGH

関連する問題