0

私は2つのテーブルUserとArticleを持っています。テーブル間の関係は次のとおりです

モデル:

class Article extends Eloquent {

  public static $table = 'article';

  public function User()
    {
    return $this->has_one('user', 'id');
    }

class User extends Eloquent {

  public static $table = 'user';

  public function Article()
    {
       return $this->belongs_to('article', 'id_user');
    }

アーティクルビューでユーザーから直接名前の値を取得したいのですが、エラー Trying to get property of non-object で動作しません

私のコントローラー:

public function action_index()
    {

    $Article = Article::order_by('id')->paginate(10);

    return View::make('article.index')->with('$articles', $Article);
    }

私の見解:

@foreach ($articles->results as $Arti)
      <tr>
       <td>{{$Arti->id}}</td>
       <td>{{$Arti->tag}}</td>
       <td>{{$Arti->user->name }}</td>  <------ ERROR
       <td>{{$Arti->content}}</td>
       <td>{{$Arti->date}}</td>
       <td>
4

1 に答える 1

2

以下を見てください。いくつかの点があなたのものとは異なります...

  1. 記事はユーザーに属しています (has_one ではありません)
  2. ユーザーhas_many の記事 (beens_to ではない)
  3. リレーションシップは小文字で、has_many は複数形 (articlesまたはuser)で名前を付ける必要があります。
  4. 関係のサブジェクトはクラス名にする必要があります (つまりArticle、 またはUser)
  5. 外部キーの名前は relationship_id にする必要があります。つまり、user_id
  6. 熱心なロード関係::with()へのクエリに追加
  7. ページネーションするとき->resultsは、ビューでアクセスする必要があります

class Article extends Eloquent {

    // 3: lowercase 'user'
    public function user()
    {
        // 1: Article belongs to User
        // 4: class name 'User'
        // 5: Foreign key on article table is user_id
        return $this->belongs_to('User');
    }

}

// models/user.php

class User extends Eloquent {

    // 3: lowercase plural 'articles'
    public function articles()
    {
        // 2: User has many Articles
        // 4: class name 'Article'
        return $this->has_many('Article');
    }

}

// controllers/articles.php

class Article_Controller extends Base_Controller {

    public $restful = true;

    public function get_index()
    {
        // 6: Eager load the user relationship, ::with('user')
        $articles = Article::with('user')->order_by('id')->paginate(10);
        return View::make('articles.index', compact('articles'));
    }

}

// views/articles/index.blade.php
// 7: access $articles->results from the paginator

@foreach ($articles->results as $article)

    <h1>{{ $article->title }}</h1>
    <p>By {{ $article->user->name }}</p>

@endforeach

{{ $articles->links() }}
于 2013-04-12T14:12:25.477 に答える