У меня проблема с пониманием foreach laravel 5.6 - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть постоянная проблема со всем моим проектом, и мне нужна помощь, чтобы понять, как заставить его работать.

На мой взгляд =

URL = mysite.com/product/40, поэтому здесь идентификатор продукта составляет 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 это коллекция.

Ответы [ 5 ]

0 голосов
/ 18 сентября 2018

Вы должны попробовать это:

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

foreach($user as $rowdata){
    $store = Store::where('user_id', $rowdata->id)->get();
}
0 голосов
/ 18 сентября 2018

Согласно вашему коду, здесь $ 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 голосов
/ 18 сентября 2018

Вы можете реорганизовать свой код для использования метода построителя запросов 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 пустым или нулевым, чтобы не возникало непредвиденных ошибок

0 голосов
/ 18 сентября 2018

1) Во-первых, вы можете использовать Injection, чтобы избежать этой строки: $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

0 голосов
/ 18 сентября 2018

Пожалуйста, сначала проверьте, дает ли магазин объект или нет, используя var_dump.После этого вы можете заглянуть в https://laravel.com/docs/5.6/queries для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...