Как получить столбец между двумя значениями согласно пользовательскому вводу - PullRequest
0 голосов
/ 17 мая 2019

Я застрял на одном решении. Я хочу получить столбец в соответствии с положением пользователя на сумму.

  1. за 1000 рупий.Я хочу, чтобы все данные были ниже 1000.

  2. за 2000 рупий.Я хочу данные между 1000 и 2000.

  3. для 3000 рупий.Я хочу данные между 2000 и 3000.

  4. для 4000 рупий.Я хочу данные между 4000 и 4000.

Я сделал это, как показано ниже, но это не работает.

     $product = Product::select('product_price')
                        ->get();

        foreach ($product as $value) {

            if($value->product_price == 1000){

                  $prod1 = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
                    ->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
                    ->where('timeline_product.product_price','<=',1000)
                    ->orderBy('timeline_product.updated_at', 'desc')
                    ->limit($limit)
                    ->offset($offset)
                    ->get();

                   // $post = array('result' => $prod1); 

            }elseif ($value->product_price == 2000) {

                    $prod2 = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
                    ->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
                    ->whereBetween('timeline_product.product_price', [1000, 2000])
                    ->orderBy('timeline_product.updated_at', 'desc')
                    ->limit($limit)
                    ->offset($offset)
                    ->get();

                  // $post = array('result' => $prod2); 

            }elseif ($value->product_price == 3000) {

                     $prod3 = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
                    ->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
                    ->whereBetween('timeline_product.product_price', [2000, 3000])
                    ->orderBy('timeline_product.updated_at', 'desc')
                    ->limit($limit)
                    ->offset($offset)
                    ->get();
                  // $post = array('result' => $prod3); 

            }elseif ($value->product_price == 4000) {

                     $prod4 = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
                    ->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
                    ->whereBetween('timeline_product.product_price', [3000, 4000])
                    ->orderBy('timeline_product.updated_at', 'desc')
                    ->limit($limit)
                    ->offset($offset)
                    ->get();

                  // $post = array('result' => $prod4); 

            }

        // array_push($product,$post);

        }

Пожалуйста, помогите достичь того же.Спасибо,

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Я думаю, это то, что вам нужно:

Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
    ->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price', 'timeline_product.reward_points', 'timeline_product.created_at', 'timeline_product.updated_at')
    ->when(request('product_price') <= 1000, function ($q) {
        $q->where('timeline_product.product_price', '<=', 1000);
    })
    ->when(request('product_price') > 1000 && request('product_price') <= 2000, function ($q) {
        $q->whereBetween('timeline_product.product_price', [1000, 2000]);
    })
    ->when(request('product_price') > 2000 && request('product_price') <= 3000, function ($q) {
        $q->whereBetween('timeline_product.product_price', [2000, 3000]);
    })
    ->when(request('product_price') > 3000 && request('product_price') <= 4000, function ($q) {
        $q->whereBetween('timeline_product.product_price', [3000, 4000]);
    })
    ->orderBy('timeline_product.updated_at', 'desc')
    ->limit($limit)
    ->offset($offset)
    ->get();
1 голос
/ 17 мая 2019

Глядя на ваше объяснение, кажется, что в вашем списке продуктов есть только product_price = 1000, 2000, 3000 and 4000

Таким образом, исходя из текущего сценария и вашего кода, кажется, что у вас есть только четыре продукта.Вот более точный код, который вернет вам все продукты в списке на основе цены -

$product = Product::select('product_price')->get();
$prods_according_price = [];
foreach ($product as $value) {
    $end_filter = $value->product_price
    $start_filter = $end_filter - 1000;
    $prods_according_price[$end_filter][] = Product::join('company', 'timeline_product.company_id', '=', 'company.company_id')
        ->select('company.name', 'company.logo', 'timeline_product.company_id', 'timeline_product.product_name', 'timeline_product.product_desc', 'timeline_product.product_price','timeline_product.reward_points' ,'timeline_product.created_at', 'timeline_product.updated_at')
        ->whereBetween('timeline_product.product_price',[$start_filter, $end_filter])
        ->orderBy('timeline_product.updated_at', 'desc')
        ->limit($limit)
        ->offset($offset)
        ->get();
}
print_r ($prods_according_price)

Вы получите что-то вроде -

Array(
  [1000] => Array(
      [0] => Array(.....),
      [1] => Array(.....),
     ),
  [2000] => Array(
      [0] => Array(.....),
      [1] => Array(.....),
     ),
  [3000] => Array(
      [0] => Array(.....),
      [1] => Array(.....),
     ),
  [4000] => Array(
      [0] => Array(.....),
      [1] => Array(.....),
     )
)

Если естьлюбая опечатка или предупреждение в нем, дайте мне знать.Поскольку я не выполнил это.

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