从视图中获取价值

时间:2013-03-21 10:25:21

标签: php laravel laravel-3

我有两张表User&文章表之间的关系是

型号:

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');
    }

我想直接在文章视图中从User获取名称值,但不能使用错误 试图获得非对象的属性

我的控制器:

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>

1 个答案:

答案 0 :(得分:2)

看看下面的内容,有些事情与你的不同......

  1. 文章belongs_to用户(不是has_one)
  2. 用户has_many文章(非belongs_to)
  3. 您的关系应以小写命名,复数为has_many(即articlesuser
  4. 您的关系主题应该是班级名称(即ArticleUser
  5. 外键应为name relationship_id,即user_id
  6. ::with()添加到您的查询eager load relationships
  7. 当您paginate时,您需要在视图中访问->results
  8. 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() }}