现在,可以通过首先获取User 然后使用该ID 获取Posts 来获取Posts。注意:这不是在关系中使用 Laravel 的推荐方式:
$user = User::find($id);
$posts = Post::where("user_id", "=", $user->id)->get();
虽然这可行(假设您有一个带有user_id 键的Post 模型),但正确的方法是在模型中定义关系。对于这个,它将是 hasMany() 和 belongsTo() User 和 Post 恭敬地。这是您的User.php 模型类:
class User extends Eloquent {
protected $table = "users";
public function posts(){
return $this->hasMany("Post");
}
}
并确保在您的 Post.php 模型类中定义逆:
class Post extends Eloquent {
protected $table = "posts";
public function user(){
return $this->belongsTo("User");
}
}
最后,您可以使用以下命令在控制器中查询此关系:
$user = User::find($id);
$posts = $user->posts()->get();
这还将通过强制任何更新/保存使用正确的user_id 密钥来强制执行完整性。关于如何使用Eloquent 风格的数据库查询,有一些相当广泛的文档,请在此处查看:
Laravel - Eloquent
希望有帮助!
编辑
要将其传递给视图,请将以下内容添加到您的控制器:
public function view_post($id){
$user = User::find($id);
$posts = $user->posts()->get();
return View::make("view")->with(array("user" => $user, "posts" => $posts));
}
您需要在您的app/views 目录中创建一个名为(在本例中)view.blade.php 的文件,该文件“回显”有关用户和帖子的所有信息:
<h2>User: {{ $user->id }} - {{ $user->email }}</h2>
<br/>
<h2>Posts:</h2>
@foreach($posts AS $post)
<p> {{ $post->id }}: {{ $post->content }}</p>
@endforeach
等等。请注意,我不知道您的 users 和 posts 表有哪些列,但使用 $user->column 或 $post->column 会回显该命名列的内容。
这是Views and Responses 的文档,可以帮助您解决这个问题:
Laravel - Views and Responses