首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

Laravel ORM 如何查询关联表

  •  
  •   domino · 2016-12-07 19:34:03 +08:00 · 7741 次点击
    这是一个创建于 1016 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚学 Laravel 对 ORM 操作有点不熟悉,
    想请教一下,
    我有两个表,分别为 posts,users
    并在 posts model 做了关联.

    public function author(){
    return $this->belongsTo('App\User','user_id','id');
    }
    想要写一个搜索功能,透过搜索作者,找到所有发文,
    ORM 方式该怎做呢? 下面方式似乎找不到
    $posts = Post::query();
    $posts->orWhere('name', '=', "{$keyword}");

    还是只能用查询构造器方式来写呢?
    $posts = Post::leftjoin('users', 'posts.user_id', '=', 'users.id');
    这样虽然是能运行,也能加入 where 条件做搜索.
    但感觉似乎是用 Query Builder 完成的,并非使用关联
    这样关联似乎是否就没意义了.
    7 回复  |  直到 2017-09-18 15:44:35 +08:00
        1
    xuxu   2016-12-07 19:43:09 +08:00
    user 的 model 加上 hasMany 关系
        2
    jay4497   2016-12-07 19:52:32 +08:00
    加上楼上的,然后获取 $user ,然后用户下的所有文章就是 $posts = $user->posts;
        3
    maja   2016-12-07 20:07:35 +08:00
        4
    domino   2016-12-07 20:10:51 +08:00
    那如果要可以搜索 users 的 name 或 posts 的 title 呢 ?
    用 leftjoin 可以直接在下面加两 Where 来解决.
        5
    domino   2016-12-07 20:14:55 +08:00
    我在练习写一个文章列表,
    搜索列表可以用 作者名称 或 标题.
    目前只会用 Query Builder 来写.

    relationships 方式还是不清楚.
        6
    dntc   2016-12-07 20:52:45 +08:00
    @domino
    $user = User::with(['posts' => function($query) {
    $query->where('title', 'like', '%标题%');
    }])->where('name', '=', '姓名')->first();
        7
    pov32   2017-09-18 15:44:35 +08:00
    post:with('users')->wherehas('users', function($query){
    $query->where('name', 'like', '%作者名称%');
    })->get();
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2545 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 13:20 · PVG 21:20 · LAX 06:20 · JFK 09:20
    ♥ Do have faith in what you're doing.