Laravel根据给定ID查询记录

3

我正在尝试获取给定记录ID之后的10条记录。

$media =  Media::where('active', '=', 1)->after('id',$after)->take(10)->get();

Laravel没有after函数。有其他的方法可以实现吗?


1
你能否只使用一个 where 子句来限制 $id > $after - msturdy
2个回答

4

使用另一个where子句

$media =  Media::where('active', 1) // don't need the "="
               ->where('id', '>', $after)
               ->take(10)
               ->get();

这将在SQL中构建以下查询(假设您的$table在Media模型中被定义为"media"):
SELECT * 
  FROM media 
 WHERE active = 1 
   AND id > $after 
 LIMIT 10

@lukasgeiter提到,应该按照id列对结果进行排序,因为没有order by语句,结果的顺序不能保证。

这个可以用,如果我想使用自定义标识符呢?比如用 slug 而不是 id - Naveen Gamage
只需要将“id”替换为“slug”。注意 - 如果“slug”是主键,则需要在模型中定义。 - msturdy
这个会起作用吗?where('slug', '>', $after)slug是varchar类型! - Naveen Gamage
1
好的,通常情况下,如果原始SQL可行,那么您可以在Laravel中构建一个查询。 如果有疑问,我建议先在数据库上测试查询,然后再尝试在Laravel中构建它。 - msturdy
好的,那我会试一下!谢谢伙计。 - Naveen Gamage
显示剩余2条评论

3

您是指id > $after吗?

$media =  Media::where('active', '=', 1)
               ->where('id', '>', $after)
               ->take(10)
               ->get();

同样需要确保结果按照ID排序,并且在$after之后取前10个。
$media =  Media::where('active', '=', 1)
               ->where('id', '>', $after)
               ->orderBy('id', 'asc')
               ->take(10)
               ->get();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接