gpt4 book ai didi

javascript - 在 laravel 中通过 javascript 获取信息

转载 作者:太空狗 更新时间:2023-10-29 13:31:18 25 4
gpt4 key购买 nike

我正在尝试通过 javascript 从第二个表中获取特定列并将其数据返回到我的 View ,但我不确定如何完成。

逻辑

  1. Products 表有 price
  2. 折扣表有 product_idminmaxamount
  3. 我输入数字作为数量,如果我的折扣表中有产品 ID基于 minmax 返回 amount 作为新价格

代码

到目前为止这是我的代码(我知道特别是我的 Controller 方法有识别问题来找到正确的数据)

JavaScript

<script>
$(document).ready(function() {
// if quantity is not selected (default 1)
$('#newprice').empty();
var quantity = parseInt(document.getElementById("quantity").value);
var shipingcost = parseFloat(quantity);
var shipingcostnumber = shipingcost;
var nf = new Intl.NumberFormat('en-US', {
maximumFractionDigits:0,
minimumFractionDigits:0
});
$('#newprice').append('Rp '+nf.format(shipingcostnumber)+'');

// if quantity is changed
$('#quantity').on('change', function() {
var quantity = parseInt(document.getElementById("quantity").value);
var qtyminmax = $(this).val();
if(qtyminmax) {
$.ajax({
url: '{{ url('admin/qtydisc') }}/'+encodeURI(qtyminmax),
type: "GET",
dataType: "json",
success:function(data) {
$('#totalPriceInTotal').empty();
var shipingcost = parseFloat(data)+parseFloat(quantity);
var shipingcostnumber = shipingcost;
var nf = new Intl.NumberFormat('en-US', {
maximumFractionDigits:0,
minimumFractionDigits:0
});
$('#totalPriceInTotal').append('Rp '+nf.format(shipingcostnumber)+'');
}
});
}else{
//when quantity backs to default (1)
$('#newprice').empty();
var quantity = parseInt(document.getElementById("quantity").value);
var shipingcost = parseFloat(quantity);
var shipingcostnumber = shipingcost;
var nf = new Intl.NumberFormat('en-US', {
maximumFractionDigits:0,
minimumFractionDigits:0
});
$('#newprice').append('Rp '+nf.format(shipingcostnumber)+'');
}
});
});
</script>

路线

Route::get('qtydisc/{id}', 'ProductController@qtydisc');

Controller

public function qtydisc($id){
return response()->json(QtyDiscount::where('min', '>=', $id)->orWhere('max', '<=', $id)->pluck('min'));
}

问题

  1. 我应该在我的 Controller 方法中更改什么以获得正确的数据?
  2. 我应该在我的 JavaScript 代码中更改什么?我应该添加 产品吗
    ID
    也在我的 route 还是...?

更新

我正在尝试对我的代码进行一些更改,但我无法获得正确的 amount

Controller

public function qtydisc($id, $qty){
$price = DB::table('qty_discounts')
->where('product_id', $id)
->where([
['min', '>=', $qty],
['max', '<=', $qty],
])
// ->where('min', '>=', $qty)
// ->where('max', '<=', $qty)
->select('amount')
->first();
return response()->json($price);
}

路线

Route::get('qtydisc/{id}/{qty}', 'ProductController@qtydisc');

javascript

//as before...

$('#quantity').on('change', function() {
var idofproduct = ["{{$product->id}}"]; //added
var quantity = parseInt(document.getElementById("quantity").value);
var qtyminmax = $(this).val();
if(qtyminmax) {
$.ajax({
url: '{{ url('admin/qtydisc') }}/'+idofproduct+'/'+encodeURI(qtyminmax), //changed
type: "GET",
dataType: "json",
success:function(data) {
$('#totalPriceInTotal').empty();
var shipingcost = parseFloat(data)+parseFloat(quantity);
var shipingcostnumber = shipingcost;
var nf = new Intl.NumberFormat('en-US', {
maximumFractionDigits:0,
minimumFractionDigits:0
});
$('#totalPriceInTotal').append('Rp '+nf.format(shipingcostnumber)+'');
}
});
}else{
//rest of it as before

截图

screenshotdb

这就是我的数据库的样子,作为 26 之间数量的结果,我得到 7000 而我必须得到 500025

从数字 79 我没有得到任何结果。

从数字 10 到我得到的全部是 7000

有什么想法吗?

最佳答案

主要问题来自您 Eloquent 陈述,您应该使用 orWhere 帮助器在两种情况下使用 =OR 运算符,所以它应该是这样的:

$price = QtyDiscounts::where('product_id', $id)
->where('min', '>=', $qty)
->orWhere('max', '>=', $qty)
->pluck('amount')
->first();

但你真的需要看看你的 JS 结构,我建议将你的代码拆分为 DRY 概念的功能,首先是事件监听器,如:

$('body').off('input', '#quantity').on('input', '#quantity', function () {
var qty = parseInt( $(this).val() );

if(qty) {
getAmount(qty);
}else{
getAmount(1);
}
});

然后辅助函数调用:

function setValue(quantity, amount)
{
var newPrice = $('#newprice');
var totalPrice = $('#totalPriceInTotal');

newPrice.empty();
totalPrice.empty();

var nf = new Intl.NumberFormat('en-US', {
maximumFractionDigits:0,
minimumFractionDigits:0
});

newPrice.val('Rp '+nf.format(amount)+'');
totalPrice.val('Rp '+nf.format(parseFloat(amount)*parseFloat(quantity))+'');
};

function getAmount(quantity)
{
var url = $('#qty_url').val();
var productId = $('#product_id').val();

$.ajax({
url: url+'/'+productId+'/'+encodeURI(quantity),
type: "GET",
dataType: "json",
success:function(amount) {
setValue(quantity, amount);
}
});
};

我猜你有一个简单的 HTML 结构,所以它应该以这种方式工作,如果从不直接在里面使用像 url & product_id 这样的 php 变量,为什么我建议在这里您的 JS 代码改为附加您想要隐藏输入的值,并使用 JS 获取这些输入的值:

<input type="hidden" id="qty_url" value="{{ url('admin/qtydisc') }}" />
<input type="hidden" id="product_id" value="{{ $product->id }}"/>

关于javascript - 在 laravel 中通过 javascript 获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51585831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com