Php 获取除first()以外的特定行

Php 获取除first()以外的特定行,php,mysql,laravel,cartalyst-sentry,Php,Mysql,Laravel,Cartalyst Sentry,我和拉威尔有点小问题,可能很容易解决。简而言之,情况是:我有两个表,一个用于用户,另一个用于具有“user_id”列的产品,因此我可以识别关联的用户 在拉威尔,我可以使用 $user = Sentry::getUser(); //Or Auth::user() if you're not using Sentry $products = DB::table('table2')->where('user_id',$user->id); 这应该给我用户拥有的每一种产品。好

我和拉威尔有点小问题,可能很容易解决。简而言之,情况是:我有两个表,一个用于用户,另一个用于具有“user_id”列的产品,因此我可以识别关联的用户

在拉威尔,我可以使用

$user = Sentry::getUser();        //Or Auth::user() if you're not using Sentry
$products = DB::table('table2')->where('user_id',$user->id);
这应该给我用户拥有的每一种产品。好

现在我想在屏幕上单独显示产品,但不幸的是,这不起作用。我似乎无法以字符串形式回显此信息,因为它由多行组成。我明白了

类Illumb\Database\Query\Builder的对象无法转换为字符串

对于解决方案,由于我在系统中允许的最大关联产品数是3,所以我想到了分别获取每一行并重复它们的想法。对于第一个,它很简单:
$products->first()
也许我是这里的新手,但我认为我不能使用产品的id信息,因为$products->id返回一个错误

有人能帮我吗


提前谢谢

要使用
获取
,将结果数量限制为三个,然后使用foreach循环打印每个结果。文件:

$products=DB::table('table2')->where('user\u id',$user->id)->take(3)->get()

然后,在视图中,您可以遍历这些数据:

@foreach($p形式的产品)

或者,在您的PHP中,您可以使用以下内容迭代此数据:

foreach($products as$product){var_dump($product);}

(之所以出现此错误,是因为您试图将结果对象作为一个整体输出,而不是它所包含的数据。使用循环实际上会从结果对象中获取数据,这样您就可以正常使用循环变量(
$product
))

$products = DB::table('table2')->where('user_id',$user->id);
然后,$products是一个数组,您不必回送一个数组。 要显示产品,您需要使用如下所示的foreach循环

foreach ( $products as $key => $product ) {
   var_dump( $product );
}
如果只想显示三种产品,则可以使用forforeach内部循环

您可以从下面的链接了解有关foreach的更多信息


要从数据库中获取数据,您可以使用以下方法之一:
all
get
first

使用
all

$products = DB::table('table2')->all();
你得到了所有的产品

使用
first
可以使用条件,但只能得到满足条件的第一条记录:

$products = DB::table('table2')->where('user_id',$user->id)->first();
$products = DB::table('table2')->where('user_id',$user->id)->get();
使用
get
可以使用条件,您将获得满足这些条件的所有记录:

$products = DB::table('table2')->where('user_id',$user->id)->first();
$products = DB::table('table2')->where('user_id',$user->id)->get();

因此,在您的情况下,您希望使用
get
从数据库中获取数据。

打印产品时看到的输出
print\r($products)
u可以像正常情况一样使用
->get()
,在视图中通过
$bla[0,1,2,等等]->column\u name
或使用
->skip(how_number)->get()
选择您想要的行,但这并不局限于一行,您仍然需要在视图中进一步处理它。@Down voter:有问题的@gabriel rebello已经写了“我想出了一个主意,把每一行分开,并重复它们。第一个很简单:$products->first();但是我不知道如何获得另外两个。”。这就是为什么我编写了如何使用foreach循环分别回显信息的原因。如果你因为投票的原因留下评论,这对我来说是一个很好的学习。很好!我甚至没有想到foreach。我想我还有很多东西要学。使用
->get()查询
从数据库中实际获取一组对象,并在我的视图中使用
@foreach
解决了我的问题。非常感谢Surya和Marcin!就是这样。正如我在阅读Surya和Marcin的回答后注意到的,我不是在回显数据,而是作为一个整体的对象。使用
@foreach
解决了这个问题。顺便说一下,Laravel文档ion没有解释take()中的参数代表什么。它像“take the first objects”吗?谢谢你的帮助!我把它标记为解决方案,因为它比其他答案解释得更详细。是的。
take(n)
说我只对第一个
n
项感兴趣。就像
skip(n)
说除了第一个
n
项目之外,我对所有东西都感兴趣。