2016-11-03 15 views
0

我在爲Laravel 5應用程序下訂單後爲每個客戶生成客戶ID。接下來是爲客戶生成一個ID的代碼,該代碼由他們的名字,姓氏的一部分組成,如果這會呈現重複,則會附加一個隨機字符串。PHP Laravel說我插入空值但功能應返回字符串

$ID = strtolower(substr($itemsP['firstName'],0,2) . $itemsP['lastName']); 

function checkforduplicateID($iD,$firstName,$lastName) 
{ 
    $f = $firstName; 
    $l = $lastName; 
    $orders = Order::where('customerID',$iD)->get()->count(); 

    if($orders>0) 
    { 
     $ID = strtolower(substr($firstName,0,2) . $lastName . substr(md5(rand()),0,2)); 
     checkforduplicatecode($ID,$f,$l); 
    } 
    else 
    { 
     return $iD; 
    } 
} 

$sessionOrder->customerID = checkforduplicateID($ID,$itemsP['firstName'],$itemsP['lastName']); 
$sessionOrder->save(); 

在第一次轉身(無重複),這完美的作品。但是,只要我有兩個具有相同名字和姓氏的客戶,該函數就會返回一個null,而不是具有附加(和隨機)字符串的相同ID。

所以我得到了倒數第二行的完整性違規,因爲我在我的數據庫中插入了一個null

我的checkforduplicateID函數顯然有些問題,但我無法弄清楚什麼。

請協助。

回答

1

我相信,這裏

if($orders>0) { 
    $ID = strtolower(substr($firstName,0,2) . $lastName . substr(md5(rand()),0,2)); 
    checkforduplicatecode($ID,$f,$l); 
} else { 

你需要返回新的ID是這樣的:

if($orders>0) { 
    $ID = strtolower(substr($firstName,0,2) . $lastName . substr(md5(rand()),0,2)); 
    return checkforduplicateID($ID,$f,$l); 
} else { 
+0

我不認爲這是正確的,如果有大於零匹配的訂單應該沒什麼因爲該函數需要再次運行,直到沒有訂單匹配,然後返回該ID。 –

+0

你不會像這樣循環... checkforduplicatecode()會做什麼?是應該調用相同的功能?即使如此,您仍然需要返回它生成的內容。 – WEBjuju

+0

假設checkforduplicateID()是預期的自循環結構,我更新瞭解決方案。 – WEBjuju