获取除第一行之外的特定行()

时间:2014-12-28 08:24:58

标签: php mysql laravel cartalyst-sentry

我对laravel有一点问题,可以轻松解决。简而言之,情况是:我有两个表,一个用于用户,另一个用于具有列'user_id'的产品,因此我可以识别关联的用户。

在Laravel中,我可以使用

$user = Sentry::getUser();        //Or Auth::user() if you're not using Sentry
$products = DB::table('table2')->where('user_id',$user->id);

这应该会给我用户拥有的每一件产品。好。

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

Object of class Illuminate\Database\Query\Builder could not be converted to string

对于解决方案,由于我在系统中允许的最大关联产品是3,我想出了分别获取每一行并回显它们的想法。对于第一个,它很简单:$products->first();但我不知道如何获得另外两个。

也许我在这里是新手,但我不认为我可以使用产品的ID信息,因为$ products-> id会返回错误。

任何人都可以帮助我吗?

提前致谢!

3 个答案:

答案 0 :(得分:2)

您想要使用take,将结果数量限制为3,然后使用foreach循环打印出每个结果。文件:Laravel Queries, see skip and take

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

然后,在您的视图中,您可以遍历此数据:

@foreach($products as $p)

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

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

(您收到该错误是因为您尝试输出结果对象作为整体,而不是它包含的数据。使用循环实际上从结果对象中提取数据,以便您可以使用循环变量({ {1}})通常。)

答案 1 :(得分:1)

要从数据库中获取数据,您可以使用以下方法:allgetfirst

使用all

$products = DB::table('table2')->all();

你得到了所有的产品。

使用first您可以使用条件,但您将只获得满足条件的第一条记录:

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

使用get您可以使用条件,您将获得满足这些条件的所有记录:

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

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

答案 2 :(得分:0)

使用时

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

然后 $ products 是一个数组,您不必回显 数组。 要显示产品,您需要使用如下所示的foreach循环

foreach ( $products as $key => $product ) {
   var_dump( $product );
}

如果您只想展示三种产品,那么您可以在 foreach 中使用进行循环。

您可以从以下链接

了解有关 foreach 的更多信息

http://php.net/manual/en/control-structures.foreach.php