Laravel - вычислить минимальное значение из нескольких полей в контроллере

Я хочу вычислить минимальное значение из набора полей формы. У меня есть отношения «один ко многим», когда в одном магазине может быть много товаров, и они работают нормально без каких-либо ошибок.

Моя форма

<form action = "{{ route('form_submit') }}" method = "post">
 @csrf
 <h3>Item 1</h3>
 <input type = "text" name = "item[]">
 <input type = "text" name = "price[]">

//Like this I can add many fields

 <input type = "submit">
</form>

Контроллер

public function store(Request $request, $id){
 $shop = Shop::findorfail($id);
 $item = Item::where('shop_id', $shop->id)->get(); //working fine
 $i=0;
 $price = request('price')

  foreach( $items as $item)
  $item->price = request('price')[$i];
  $i++;

 //I tried
  $price_group = collect($item->price)->where('shop_id', $shop->id);
  $min_price = min($price_group);

  $item->save();
}

Маршрут

 Route::post('/{id}', 'Controller@store')->name('form_submit');

Но он не рассчитывает минимальную цену. Когда у меня dd($min_price), его вообще пусто. Что мне здесь не хватает?

как получить $id?

Niklesh Raut 27.04.2018 13:12

поделитесь своим маршрутом route('form_submit')?

Niklesh Raut 27.04.2018 13:15

$ price_group должна быть коллекцией, как функция min найдет min в объекте?

madalinivascu 27.04.2018 13:17

как вы проходите $id не понятно

Niklesh Raut 27.04.2018 13:20

@madalinivascu Как мне конвертировать? Если я поменял на array($item->price)->where('shop_id', $shop->id); его Call to a member function where() on array

universal 27.04.2018 13:21

@ C2486 Работает нормально.

universal 27.04.2018 13:22

используйте toArray() для преобразования коллекции в массив

madalinivascu 27.04.2018 13:24

Извините, эта строка показывает плохое программирование foreach( $items as $item) $item->price = request('price')[$i]; $i++;

Niklesh Raut 27.04.2018 13:26

@ C2486 Куда добавить? $min = ($item->price)->where('shop_id', $shnp->id)->toArray(); и $min = ($item->price)->toArray()->where('shop_id', $shnp->id)->toArray(); не работают.

universal 27.04.2018 13:30

Добавьте фигурные скобки к вашей петле foreach.

Jonas Staudenmeir 27.04.2018 14:16

Хотите минимум request('price')?

Jonas Staudenmeir 27.04.2018 14:21

Итак, min(request('price'))?

Jonas Staudenmeir 27.04.2018 14:30

@JonasStaudenmeir Да, это решено.

universal 02.05.2018 08:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
13
218
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, это просто ...

$items = Item::where('shop_id', $shop->id)->get();

$min = $items->min('price');

И взгляните на нетерпеливую загрузку отношений. Это гораздо лучше.

Ответ принят как подходящий

Я решил это решением @Jonas. И я даю свой ответ.

Контроллер

public function store(Request $request, $id){
$shop = Shop::findorfail($id);
$item = Item::where('shop_id', $shop->id)->get(); //working fine
$i=0;
$price = request('price')

foreach( $items as $item)
$item->price = request('price')[$i];
$i++;

//This works
$min_price = min(request('price'));

$item->save();

}

Другие вопросы по теме