- 25
- 0
背景
laravel 版本
5.4
数据表关系
res 资源
tag 标签
资源 和 标签是多对多关系,所以有中间表 res_tag。
问题
我希望取出一个资源列表,要求如下:
- 最新的5条
- tag.id in (1,3,5)
笨方法
我用查询构造器,实现这样的SQL语句。
SELECT
*
FROM
res
LEFT JOIN res_tag ON res_tag.res_id = res.id
WHERE
res_tag.tag_id IN (1, 3, 5)
期望答案
laravel 中是否有更优雅的实现方法。
我对更优雅的定义:比如利用ORM的 “关联” 是否能实现?
20171205,追问
非常感谢 @nopainnogain 的解答,我做了如下修改。
代码
knowledge 就是 tag(上文我为了叙述问题,做了简化)
$knowledge = new Knowledge();
$res = $knowledge->res()
->whereIn('knowledge_id', $knowledge_ids)
->orderBy('created_at', 'desc')
->limit(5)->get();
SQL
实际执行的SQL语句,程序自动添加了 knowledge_res.knowledge_id IS NULL 这个查询条件,导致查不出任何数据。(去掉此查询条件,结果能满足需求)
SELECT
* FROM
`res`
INNER JOIN `knowledge_res` ON `res`.`id` = `knowledge_res`.`res_id`
WHERE
`knowledge_res`.`knowledge_id` IS NULL
AND `knowledge_id` IN (
164,
165,
166,
167,
168,
169,
170
)
AND `res`.`deleted_at` IS NULL
ORDER BY
`created_at` DESC
LIMIT 5
另外,有一事疑惑
回答中代码:资源Model::query()->tags()
生成的SQL: select * from tag inner 资源 ... 这样取出的资源是以 tag 为主的,我希望是资源列表
所以我改为:tagModel::query()->资源()
生成的SQL:select * from 资源 inner join tag ... 也就是上文提供的SQL。
不知道是解答时手误还是我其他环节出了问题。
- 共 0 条
- 全部回答
-
触碰岁月 普通会员 1楼
在 Laravel 中,你可以使用 Eloquent ORM 来更优雅地实现数据查询需求。Eloquent 是 Laravel 提供的 ORM,它可以让你更方便地操作数据库。
以下是一个简单的例子,展示了如何使用 Eloquent 来查询数据:
```php use App\Http\Controllers\UsersController;
class UserController extends Controller { public function index() { $users = User::all(); return view('users.index', compact('users')); } } ```
在这个例子中,我们首先导入了 Eloquent ORM,然后创建了一个名为 UserController 的控制器。在 UserController 中,我们定义了一个名为 index 的方法,该方法使用 Eloquent 的
all方法来查询所有用户,并将查询结果作为参数传递给视图。这样,你就可以通过 URL 来访问这个视图,而不是通过数据库查询语句。这样不仅可以提高代码的可读性,还可以提高代码的执行效率。
注意,Eloquent ORM 提供了各种查询方法,如
where、orWhere、groupBy、having等,你可以根据你的需求来选择合适的查询方法。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
