我对foreach了解laravel 5.6有一个问题

问题描述 投票:2回答:5

我的所有项目都存在问题,我需要帮助了解如何使其工作。

在我看来=

URL = mysite.com/product/40所以这里的产品ID是40

在视图中,我正在做一个foreach循环,以显示所有拥有此产品的商家。我们有很多商家有很多产品,所以这是一个多对多的关系。

现在在我的控制器上

$product = Product::find($id);  // to find the product

$users = $product->users;  // here the user is the merchant that have the product
$store = Store::where('user_id', $user->id)->value('social');

在这里我得到错误:

试图获得非对象的属性

所以我想访问控制器中每个商家的商店我该怎么做?因为现在$user是一个集合。

php mysql laravel
5个回答
2
投票

请首先使用var_dump验证商店是否正在提供对象。之后,您可以查看https://laravel.com/docs/5.6/queries了解更多详情。


2
投票

1)首先你可以使用注入来避免这一行:$product = Product::find($id);

public function your_controller_methon(Product $product) {}

Laravel将自动为您完成这个技巧,$ product已经包含Product对象。

2)如果你有关系,你应该做类似的事情:

$product->stores - 检索product_id列中包含特定产品的所有商店。你可以这样做:$product->stores()->pluck('social');从所有拥有特定产品的商家中检索社交名单。

关于您可以在这里阅读的关系:https://laravel.com/docs/5.7/eloquent-relationships


2
投票

您可以重构代码以使用whereIn()查询构建器方法,因为您有许多产品用户。你会有类似的东西:

$product = Product::find($id);  // to find the product

$users = $product->users->pluck('id');
$stores = Store::whereIn('user_id', $users->all())->value('social');

这意味着您的$ stores变量将包含用户拥有的那些商店。

PS:请务必检查$users是否为空或为空,这样您就不会遇到意外错误


2
投票

根据你的代码,这里$ user是一个单独的值,而不是一个集合。

更改:

$store = Store::where('user_id', $user->id)->value('social');

$store = Store::where('user_id', $user);

它会奏效。

要将$ user作为集合,请执行此类查询,以便返回如下数组:

$product = Product::find($id); 
$user = Product::where('user', $product->user)->get();

这将返回此产品的用户集合。

然后执行foreach循环:

foreach($user as $rowdata){
    $store = Store::where('user_id', $rowdata->id)->get();
}

0
投票

你应该试试这个:

$product = Product::find($id); 
$user = Product::where('user', $product->user)->get();

foreach($user as $rowdata){
    $store = Store::where('user_id', $rowdata->id)->get();
}
© www.soinside.com 2019 - 2024. All rights reserved.