2017-08-29 9 views
0

Laravel Eloquentを使用して外部キーが所属しているユーザーの名前を取得します。Laravelを使用して外部キーに属するユーザーの名前を取得する方法は?

私はポストのモデルがあります:

Class Posts Extends Eloquent{ 
protected $table = 'posts'; 
protected $fillable = array('title, image, text, user_id'); 
public $timestamps = false; 

} 

と ユーザモデル:

class User extends Authenticatable 
{ 
    use Notifiable; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 
} 

私は閲覧するには、ユーザー名、タイトル、テキスト、画像の値をコントローラに送信したいが。 >記事は、その後、あなたはこれがポストテーブル上の任意のuser_id探しますhasMany

public function posts(){ 
    return $this->hasMany('App\Post'); 
} 

を使用することができます -

public function index(){ 
    // get all the bears 
     $posts = Posts::all(); 
     return View::make('welcome', compact('posts')); 
    } 
+0

あなたは[関係](https://laravel.com/docs/5.5/eloquent-relationships) – aynber

+0

を設定する必要があります@ aynber私はlaravelのドキュメントがあいまいなので、これのいくつかの例が好きです –

答えて

0

class Posts extends Model 
{ 
    public function user(){ 
     return $this->belongsTo('App\User'); 
    } 
    // Whatever your code in Post model 
} 


class User extends Model 
{ 
    public function posts(){ 
     return $this->hasMany('App\Post'); 
    } 
    // Whatever your code in User model 
} 

、などのモデルの間には多くの関係に1を定義します。これで、投稿が各投稿に属しているユーザーの名前を取得できます。

Route::get('/all-posts','[email protected]')->name('get_all_posts'); 

はここ

、ユーザー名の新しい配列を作成し、ビューに渡すことができます何かをする時のポスト

class PostController extends Controller 
{ 
    public function getAllPosts() { 
     $posts = Posts::all(); 

     foreach ($posts as $post){ 

      $username = $post->user->name; 
      //do something with $username 

     } 
     return view('all_posts')->with('detailed_posts'); 
     //here the $detailed_posts can be defined in the 'do something' above 
    } 
} 

を取得するために、コントローラクラスを書くようルートを定義します

または

class PostController extends Controller 
    { 
     public function getAllPosts() { 
      return view(all_posts); 
    } 
} 

としてのPostControllerを設定し、all_posts.bladeを設定します。直接続くように、ブレードの構文を使用してビューにユーザー名をアクセスするためのPHP

<html> 
    <div> 
     <h1>All Posts</h1> 
     @foreach (App\Post::all() as $post) 
      <span> Title : {{ $post->title}}</span> 
      <span> Username: {{$post->user->name}}</span> 
      ....... 
     @endforeach 
    </div> 
</html> 
+0

あなたは使用しませんルータは、私はルータを使用する必要があります... –

+0

ルータが使用されていますが、ここにコードで示されていません。ルータでのみコントローラのメソッドに入る –

+0

SQLSTATE [42S02]:基本テーブルまたはビューが見つかりません:1146 'work.users'テーブルが存在しません(SQL:select * from 'users'' users'.'id'はnull limit 1) –

0

ユーザーのための関係を設定するには。別の名前が付いている場合は、2番目のパラメータとして渡すことができます。ポストテーブルで

public function posts(){ 
    return $this->hasMany('App\Post', name_of_column_in_post_table, name_of_column_in_user_table); 
} 

、あなたはhasOnebelongsToのいずれかをしたいです。どちらも同じように動作します:

public function users() { 
    return $this->belongsTo('App\User', name_of_column_in_user_table, name_of_column_in_post_table); 
} 

あなたは、その後、すべてのコントローラやビューで今

Class Posts Extends Eloquent{ 
    protected $table = 'posts'; 
    protected $fillable = array('title, image, text, user_id'); 
    public $timestamps = false; 
    public function user() 
    { 
    return $this->belongsTo('App\User','user_id); 
    } 
} 

のような関係を追加するモデルクラスでは$post->user->name

+0

このコードは、ユーザーのモデルで実装されていますか?またはコントローラ? @aynberは明確にしてください。 –

+0

'posts'関数は' User'モデルに入り、 'user'関数は' Posts'モデルに入ります。 – aynber

+0

これはコントローラには有効ですか? –

0

を実行してユーザー情報を取得することができますポストのインスタンスを使用することができます: 例で

$post->user 

多対1の関係、さらに熱心な読み込みについてのドキュメントを読んでください。ドキュメントhereで説明したように

+0

SQLSTATE [42S02]:基本テーブルまたはビューが見つかりません:1146 'work.users'テーブルが存在しません(SQL:select * from 'users'' from' users'.ididはNULL制限1です) –

関連する問題