我有两张桌子
users:
id, name
posts:
id, user_id, text
如何通过用户的姓名而非ID来查询用户的所有帖子。像这样:
Post::with('user')->where('name','Peter')
编辑:
我发现最好从用户开始查询:
User::where('name','Peter')->first()->Posts();
但是,调用first()执行单独的查询并发布第二个查询。是否有可能在一次sql调用db?
答案 0 :(得分:0)
您可以尝试查询构建器并执行以下操作:
$posts = DB::table('users')
->join('posts', 'users.id', '=', 'posts.user_id')
->where('name','Peter')
->get();
答案 1 :(得分:0)
你定义了一段关系吗?发布帖子的用户是一对多...在您的用户模型中,将关系添加到帖子...
<img id="img01" src="http://pokeapi.co/media/img/18.png" onclick="set_value(this)" class="unclicked" />
<img id="img02" src="http://pokeapi.co/media/img/2.png" onclick="set_value(this)" class="unclicked" />
<BR>
<input type="hidden" id="img_value" name="img_value" value="null" />
<input type="submit" />
然后你可以这样查询用户的所有帖子......
public function posts()
{
return $this->hasMany('App\Post');
}
看一下关系文档,Eloquent中的关系真的很好而且不难搞清楚......
如果你想加载关系,你可以用with()函数来做...这会急切加载关系...
$user = App\User::where('name', 'Peter')->first();
foreach ($user->posts as p) {
//
}
希望这有帮助
答案 2 :(得分:0)
以下语法似乎创建了一个查询:
Post::whereHas('User', function($query) {
$query->where('name', 'Peter');
})->get();