2016-11-03 8 views
0

Laravel 5アプリケーションで注文した後、顧客ごとに顧客IDを生成しています。以下に続くのは、姓、名字の一部で構成される顧客のIDを生成するコードで、重複をレンダリングする場合はランダムな文字列が追加されます。PHP LaravelはNullを挿入していますが、関数は文字列を返さなければならないと言います

$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(); 

最初は(重複しない)これは完全に機能します。しかし、姓と名が同じ2人の顧客を持つとすぐに、この関数は同じIDに付加された(およびランダムな)文字列ではなく、nullを返します。

nullをデータベースに挿入しているため、最後から2番目の行で整合性違反が発生しています。

私の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

関連する問題