2016-05-22 10 views
1

Laravelで$user = Auth::user()は、現在ログインしているユーザーを返します。このユーザーからは、ほんのわずかの列をキー値配列に取り込みたいと思っています。私の選択肢は何ですか?Eloquent - ログインしているユーザーから特定の列を取得

例:

$user = Auth::user()->fetch('id', 'username', 'email'); 

が、私は雄弁ドキュメントを検索しましたが、私が探している機能を発見していない

[ 
    "id" => 1, 
    "username" => "John Doe", 
    "email" => "[email protected]" 
] 

私に与える必要があります。私はそれを逃したことがありますか?そのような機能は存在しないのでしょうか?あなたの主な目的ではなく、オブジェクトの配列を取得することで、アレイ内の余分なフィールドは、あなたの必要なフィールドがあることを考えると問題がない場合は

+0

あなたはこれまでに何を試しましたか?何かエラーが発生しましたか?はいの場合、どのようなメッセージですか? – Arcesilas

+0

私はモデルから値を取得する方法を探しています。 fetch()メソッドは存在しません。 – Basaa

+0

あなたが必要とする方法を書いてみませんか?フレームワークを使うことはもうコードを書くことではありません... – Arcesilas

答えて

3

Auth::user()はあなたのためにユーザーオブジェクトを取得するので、Eloquentではなく、Eloquentメソッドを使用することはできません。

指定された属性(参照:https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html)の配列を返すモデルには方法はありませんが、あなたは、このような場合のために、あなたのUserモデルにものを作ることができます。

function myData($keys) { 
    return array_intersect_key($this->toArray(), array_flip($keys)) 
} 

は、その後、あなたはそれを呼び出すことができます使用する$user->myData(['id', 'username', 'keys'])

+0

Auth :: user()はユーザーオブジェクトを取得しますが、そのオブジェクトはまだ珍しいオブジェクト。 save()、delete()などの関数を呼び出すことができるように、オブジェクトからフィールドのセットを取得する関数が存在することが予想されます。ないと思います。ありがとう。 – Basaa

+0

確かに...私はあなた自身で書くように励ましてくれたようではありません。 – Arcesilas

+0

私はBaseModelクラスで提案した関数を実装しました(私はいつもEloquentを拡張するBaseModelクラスを使用します)、名前をfetchに変更しました。完璧に動作します。ありがとう! – Basaa

5

、あなただけの配列にユーザモデルを唱えられる:

Auth::user()->toArray(); 
(array) Auth::user(); 

しかし、これらの3つのプロパティのみを出力する必要がある場合は、少しの余分なコーディングを行う必要があります。私が提案しているのは、公開されているフィールドのリストを含むUserモデルのプロパティを作成することです。次に、リストからフィールドを返すだけのtoArray()メソッドをオーバーライドします(または別のメソッドを作成します)。

+0

ありがとうございます。 Eloquentでクエリを作成する場合は、select()メソッドを使用してフェッチするフィールドをフィルタできます。だから、単一の行をフェッチした後にselect()メソッドと同等の処理を行う方法はありませんか?ところで、はい、私は追加のフィールドを気にしています。それはビルドしているAPIであり、必要以上のフィールドを公開したくないからです。 – Basaa

+0

@Basaaはそれが取り出された後に - いいえ、私は道があるとは思わない。 2番目の方法はあなたのケースでは完璧です - すべてのモデルは、公共のプロパティの事前定義リストを持っている必要があります –

+0

うーん。そのような方法は存在しないと私は思います。説明をありがとう。 – Basaa

関連する問題