如何获得只有一行从相关模型在laravel 5.1


How to get only one row from a related model in laravel 5.1?

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

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

我该怎么做呢?

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

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