我想进行条形码查找。
第一次尝试,条形码将在用户条形码上本地查找。
如果是重复项,则该函数返回第一个实例,其文字为“在本地找到”
如果在本地找不到条形码,则应该进行全局搜索。
当在本地找不到条形码时,if else语句是我遇到的问题。
如果未在本地找到,则应检查以查看是否在全局找到。
public function updatePricelist(Request $request)
{
$user_id = Auth::user()->id;
$counter = count($_POST["product_name"]);
//product barcode
for ($x = 0; $x < $counter; $x++) {
$product_barcode[] = $_POST["product_barcode"][$x];
}
//check the barcode locally
$result = $this->barcodeLookUp($product_barcode, 'local');
if (!empty($result)) {
$result = "found locally";
}
else {
$result = $this->barcodeLookUp($product_barcode, 'global');
if (!empty($result)) {
$result = "found globally";
}
}
return $result;
}
public function barcodeLookUp($product_barcode, $type)
{
$user_id = Auth::user()->id;
if ($type === 'local') {
$db_barcodes = $this->getBarcodes($user_id, 'local');
}
if ($type === 'global') {
$db_barcodes = $this->getBarcodes($user_id, 'global');
}
//merge arrays
$merge_array = array_merge($db_barcodes, $product_barcode);
function array_dup($ar)
{
return array_unique(array_diff_assoc($ar, array_unique($ar)));
}
$result = array_dup($merge_array);
return current($result);
}
public function getBarcodes($user_id, $type)
{
if ($type === 'local') {
$result = DB::select('SELECT products FROM vendor_pricelist WHERE user_id = ?', [$user_id]);
}
if ($type === 'global') {
$result = DB::select('SELECT products FROM vendor_pricelist WHERE user_id != ?', [$user_id]);
}
$count_results = count($result);
$temp = [];
$temp_2 = [];
for ($x = 0; $x < $count_results; $x++) {
array_push($temp, json_decode($result[$x]->products));
}
$x = 0;
while ($x < $count_results) {
foreach ($temp[$x] as $value) {
array_push($temp_2, $value[2]);
}
$x++;
}
$result = $temp_2;
return $result;
}
答案 0 :(得分:1)
希望你一切都好。对于您的Http响应,Laravel尝试将所有响应转换为字符串或对象,并且如果您的查找未返回任何值,Laravel会设置$ result = false(布尔值),这将给您带来错误。 >
我已经移动了一些代码,使事情变得更加清晰。首先,我在您的updatePricelist()函数中添加了else if语句以进行最终检查。这是为了在查询不返回任何结果的情况下将$ result变量设置为字符串。
$result = $this->barcodeLookUp($product_barcode, 'global');
if (!empty($result)) {
$result = $result." found globally";
}
else {
return "can save to db"; -> //this is to prevent the boolean response
}
在此之后。我将您的array_dup()函数移到了条形码外观()函数之外。
public function barcodeLookUp($product_barcode, $type)
{
$user_id = Auth::user()->id;
if ($type === 'local') {
$db_barcodes = $this->getBarcodes($user_id, 'local');
}
if ($type === 'global') {
$db_barcodes = $this->getBarcodes($user_id, 'global');
}
//merge arrays
$merge_array = array_merge($db_barcodes, $product_barcode);
$result = $this->array_dup($merge_array);
return current($result);
}
public function array_dup($ar)
{
return array_unique(array_diff_assoc($ar, array_unique($ar)));
}
答案 1 :(得分:0)
希望您做得好,可能会有所帮助
//check the barcode locally
$result = $this->barcodeLookUp($product_barcode, 'local');
if (empty($result)) {
$result = $this->barcodeLookUp($product_barcode, 'global');
if (!empty($result)) {
return [
"message" => "found globally",
"result" => $result,
];
}
return [
"message" => "not found",
"result" => null,
];
} else {
return [
"message" => "found locally",
"result" => $result,
];
}