104

Eloquent には、テーマとユーザーという 2 つの結合テーブルがあります。

テーマ モデル:

public function user() {
  return $this->belongs_to('User');
}

ユーザーモデル:

public function themes() {
  return $this->has_many('Theme');
}

私のEloquent API呼び出しは次のようになります。

return Response::eloquent(Theme::with('user')->get());

テーマからすべての列を返し(問題ありません)、ユーザーからすべての列を返します(問題ありません)。ユーザー モデルの 'username' 列だけが必要ですが、クエリをそれに制限するにはどうすればよいですか?

4

16 に答える 16

105

モデルを変更して、選択する列を指定します。

public function user() {
  return $this->belongs_to('User')->select(array('id', 'username'));
}

また、参加しているコラムを含めることを忘れないでください。

于 2013-04-25T02:37:47.050 に答える
31

次のように、get パラメータでフィールドの配列を指定できます。

return Response::eloquent(Theme::with('user')->get(array('user.username'));

UPDATE(Laravel 5.2の場合)docsから、これを行うことができます:

$response = DB::table('themes')
    ->select('themes.*', 'users.username')
    ->join('users', 'users.id', '=', 'themes.user_id')
    ->get();
于 2013-06-11T05:46:53.180 に答える
23

私は知っています、あなたはEloquentを求めますが、FluentQueryBuilderでそれを行うことができます

$data = DB::table('themes')
    ->join('users', 'users.id', '=', 'themes.user_id')
    ->get(array('themes.*', 'users.username'));
于 2013-02-06T12:22:22.377 に答える
16

これが私のやり方です

$posts = Post::with(['category' => function($query){
        $query->select('id', 'name');
      }])->get();

user2317976 による最初の回答はうまくいきませんでした。laravel 5.1 を使用しています。

于 2016-02-16T15:46:23.410 に答える
11

Another option is to make use of the $hidden property on the model to hide the columns you don't want to display. You can define this property on the fly or set defaults on your model.

public static $hidden = array('password');

Now the users password will be hidden when you return the JSON response.

You can also set it on the fly in a similar manner.

User::$hidden = array('password');
于 2013-04-25T04:28:36.040 に答える
11

ページネーションでの使用

$data = DB::table('themes')
->join('users', 'users.id', '=', 'themes.user_id')
->select('themes.*', 'users.username')
->paginate(6);
于 2015-06-30T13:06:14.243 に答える
6

こちらです:

Post::with(array('user'=>function($query){
    $query->select('id','username');
}))->get();
于 2016-03-03T05:46:20.217 に答える
4

Laravel 4 では、モデルに以下を追加することで、特定のフィールドが返されないようにすることができます。

protected $hidden = array('password','secret_field');

http://laravel.com/docs/eloquent#converting-to-arrays-or-json

于 2013-07-17T16:57:27.547 に答える
4

Laravel 5.5 では、これを行う最もクリーンな方法は次のとおりです。

Theme::with('user:userid,name,address')->get()

コロンと選択するフィールドをコンマで区切って追加し、その間にスペースを入れません。

于 2018-01-20T15:16:44.070 に答える
2

モデルの使用:

Model::where('column','value')->get(['column1','column2','column3',...]);

クエリ ビルダーの使用:

DB::table('table_name')->where('column','value')->get(['column1','column2','column3',...]);
于 2017-10-05T09:35:44.683 に答える
0

これをよく理解していれば、返されるものは問題ありませんが、1 つの列だけを表示したい場合を除きます。もしそうなら、以下はもっと簡単なはずです:

return Response::eloquent(Theme::with('user')->get(['username']));
于 2016-01-14T10:50:41.300 に答える
-3

チェックアウト、http://laravel.com/docs/database/eloquent#to-array

APIに表示したくない列を定義できるはずです。

于 2013-02-06T12:32:12.693 に答える