Laravel ORM 如何查询关联表

2016-12-07 19:34:03 +08:00
 domino
刚学 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 完成的,并非使用关联
这样关联似乎是否就没意义了.
10123 次点击
所在节点    PHP
7 条回复
xuxu
2016-12-07 19:43:09 +08:00
user 的 model 加上 hasMany 关系
jay4497
2016-12-07 19:52:32 +08:00
加上楼上的,然后获取 $user ,然后用户下的所有文章就是 $posts = $user->posts;
maja
2016-12-07 20:07:35 +08:00
domino
2016-12-07 20:10:51 +08:00
那如果要可以搜索 users 的 name 或 posts 的 title 呢 ?
用 leftjoin 可以直接在下面加两 Where 来解决.
domino
2016-12-07 20:14:55 +08:00
我在练习写一个文章列表,
搜索列表可以用 作者名称 或 标题.
目前只会用 Query Builder 来写.

relationships 方式还是不清楚.
dntc
2016-12-07 20:52:45 +08:00
@domino
$user = User::with(['posts' => function($query) {
$query->where('title', 'like', '%标题%');
}])->where('name', '=', '姓名')->first();
pov32
2017-09-18 15:44:35 +08:00
post:with('users')->wherehas('users', function($query){
$query->where('name', 'like', '%作者名称%');
})->get();

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/326002

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX