如何从laravel 5.1中的相关模型中只获取一行?

时间:2015-07-24 21:16:08

标签: php laravel-5.1

我正在使用Laravel 5.1。简而言之,我有一个可以有多个版本的实体Post:几个草稿版本和一个已发布版本。 "公开"是一个发布版本的属性。所以,我有两个模型,一个控制器和一个视图:

发布模型:

class Post extends Model{

  public function published(){
     return $this->hasMany('App\PostVersion')->where('published', 1);
  }
}

PostVersion模型:

class PostVersion extends Model{

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

这是我的控制器:

class PostsController extends Controller{

  public function index(){

      // Only published version of all posts
      $posts = Post::with('published')->get();
      return view('posts.index', compact('posts'));       
  }
}

我发布的帖子只有一个。所以,当迭代$ posts时,我想做这样的事情:

$post->published->title

而不是

$post->published[0]->title

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您需要将已发布的关系定义为一对一,而不是一对多:

class Post extends Model {
  public function published(){
    return $this->hasOne('App\PostVersion')->where('published', 1);
  }
}