2016-11-09 9 views
0

I持って次のデータベース構造:Laravelの関係でのみ列を選択する方法は?

  • ユーザー

    • ID
  • ポスト

    • ID
    • のuser_id
    • タイトル
    • コンテンツ

だから、私はモデルに関係関数を作成:

class User extends Model { 
    public function post() 
    { 
     return $this->hasMany(Post::class); 
    } 
} 

私は完全なポストオブジェクトを返す$user->post意志を実行した場合。

投稿IDを取得する方法は?

+0

親切な注意: 'post'の代わりに' posts'を使います。あなたには多くの投稿があります。 –

答えて

1

あなたはこの

$user = User::with(['post' => function ($q) { 
      $q->select('id'); 
     }])->where('id', $id)->first(); 

か、あなたはそれを動作させるために、少なくともUSER_IDを必要とするあなたの関係に

public function post() 
    { 
     return $this->hasMany(Post::class)->select(['id','user_id']); 
    } 
1

を選択設定することができますようにそれを行うことができます。

public function post() { 
    return $this->hasMany(Post::class)->select(['id', 'user_id']); 
} 

特定のケースで表示したくない場合は、試してみてください:

$user->post->each(function($post) { 
    $post->setVisible(['id']); 
}); 

こうすれば、user_idも削除できます。

0

雄弁なモデルの代わりにIDのリストを取得するには、クエリビルダーを使用します。

DB::table('posts') 
    ->select('posts.id') // fetch just post ID 
    ->join('users', 'posts.user_id', '=', 'users.id') 
    ->where('users.id', ...) // if you want to get posts only for particular user 
    ->get() 
    ->pluck('id'); // results in array of ids instead of array of objects with id property 

同じファイルにuse DB;を追加する必要があります。

関連する問題