Я застрял на одном решении. Я хочу получить столбец в соответствии с введенным пользователем значением.
за 1000 рупий. мне нужны все данные ниже 1000.
за 2000р. Мне нужны данные между 1000 и 2000 годами.
за 3000р. Мне нужны данные между 2000 и 3000 годами.
Я сделал это, как показано ниже, но это не работает.
$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);
}
Пожалуйста, помогите добиться того же. Спасибо,
@MohamedSabil83 MohamedSabil83 Я хочу, чтобы все данные были в одном, если пользователь выберет 1000, тогда только вывод, связанный с 1000, который я хочу, и одинаковый для всех


Я думаю, это то, что вам нужно:
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();
Глядя на ваше объяснение, кажется, что в вашем списке товаров есть только 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(.....),
)
)
If there is any typo or Warning in it Let me know. As I didn't executed it.
вы хотите, чтобы это было разделено или все в одной переменной?