如何从 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);
}
}
Post版本型号:
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'));
}
}
我只发布了一个版本 post。所以,当 $posts 被迭代时,我想做这样的事情:
$post->published->title
而不是
$post->published[0]->title
我该怎么做?
您需要将 published 关系定义为一对一,而不是一对多:
class Post extends Model {
public function published(){
return $this->hasOne('App\PostVersion')->where('published', 1);
}
}
我正在使用 Laravel 5.1。简而言之,我有一个可以有多个版本的实体 Post:多个草稿版本和一个已发布版本。 "Published" 是 post 版本的 属性。所以,我有两个模型,一个控制器和一个视图:
Post 型号:
class Post extends Model{
public function published(){
return $this->hasMany('App\PostVersion')->where('published', 1);
}
}
Post版本型号:
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'));
}
}
我只发布了一个版本 post。所以,当 $posts 被迭代时,我想做这样的事情:
$post->published->title
而不是
$post->published[0]->title
我该怎么做?
您需要将 published 关系定义为一对一,而不是一对多:
class Post extends Model {
public function published(){
return $this->hasOne('App\PostVersion')->where('published', 1);
}
}