ekquent在哪里通过fk值(使用)

时间:2017-03-13 00:11:15

标签: laravel eloquent

我有两张桌子

users:
id, name

posts:
id, user_id, text

如何通过用户的姓名而非ID来查询用户的所有帖子。像这样:

Post::with('user')->where('name','Peter')

编辑:

我发现最好从用户开始查询:

User::where('name','Peter')->first()->Posts();

但是,调用first()执行单独的查询并发布第二个查询。是否有可能在一次sql调用db?

3 个答案:

答案 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();