我对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会返回错误。
任何人都可以帮助我吗?
提前致谢!
答案 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)
要从数据库中获取数据,您可以使用以下方法:all
,get
或first
。
使用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 的更多信息