2017-04-24 9 views
0

私はデータベースにセッションを保存しましたが、そこには1つ以上の値があります。だから私はセッションから数量の値を取得しようとしている。セッションlaravelのセッションから値を取得する

public function logout(Request $request) 
{ 
    $cart_details = Cart::content(); 

    $cart_session_test = Session::put('cart_session_test', $cart_details); 

    $cart_data_test = Session::get('cart_session_test'); 

    $cart_test = [ 
     'data' => json_encode($cart_data_test), 
    ]; 

    $customer_id = auth()->guard('customer_admin')->user()->id; 

    $carts_tbl_test = DB::table('cart_session')->where(['customer_id' => $customer_id])->first(); 

    if(isset($carts_tbl_test)) 
    { 
     DB::table('cart_session')->where(['customer_id' => $customer_id])->update($cart_test); 
    }else{ 
     $cart_test['customer_id'] = $customer_id; 
     DB::table('cart_session')->insert($cart_test); 
    } 

    Auth::logout(); 
    Session::flush(); 

    return redirect()->route('login')->with('success', 'You`ve been successfully logged out'); 
} 

を保存する

私のコードは私が$ cart_testを打つとき、私は私が

アレイ ( [データ] => { "18d6934483b994fb9943b43b7d7646bf" を取得それをエコー:{ "rowId": "18d6934483b994fb9943b43b7d7646bf"、 "id": "8"、 "name": "Product 8"、 "qty": "2"、 "price":80、 "image": "[hot dog .jpg \ "]"、 "options":[]、 "tax":16.8、 "subtotal":160}} )

ので、その後、私のログイン機能では、私はこの

$customer_id = auth()->guard('customer_admin')->user()->id; 

$carts_tbl = DB::table('cart_session')->where(['customer_id' => $customer_id])->first(); 

if(isset($carts_tbl)) 
{ 
    $cart_data = json_decode($carts_tbl->data); 
    Session::put('cart_session_test', $cart_data); 
} 

$show_session = Session::get('cart_session_test'); 

echo "<PRE>"; 
print_r($show_session->qty); 
die(); 

を行なったし、私はCustomersController.php線81でこのエラー

ErrorExceptionました: 未定義のプロパティ:はstdClass :: $数量

ライン81は

print_r($show_session->qty); 
です。
+0

'$ show_session'変数をダンプします。 –

+0

ときI 'DD($ show_session)' Iを得る '{#410▼ + "18d6934483b994fb9943b43b7d7646bf":{#411▼ + "ROWID": "18d6934483b994fb9943b43b7d7646bf" + "ID": "8" + "名前" : "製品8" + "数量": "2" + "価格":80 + "イメージ": "[" ホットdog.jpg "]" + "オプション":[] + "税":16.8 +" subtotal ":160 } – Isis

+0

を参照してください。セッション中に' qty'を '18d6934483b994fb9943b43b7d7646bf'の別の配列の中に格納しています。 –

答えて

1

logoutコントローラでは、セッションをフラッシュしています。したがって、セッションをフラッシュすると、データベースからデータが削除されます。

したがって、loginからデータにアクセスすると、何も表示されません。

このようなあなたの login機能を変更

$customer_id = auth()->guard('customer_admin')->user()->id; 

$carts_tbl = DB::table('cart_session')->where(['customer_id' => $customer_id])->first(); 

if($carts_tbl) 
{ 
    $cart_data = json_decode($carts_tbl->data); 
    Session::put('cart_session_test', $cart_data); 
    $show_session = Session::get('cart_session_test'); 

    echo "<PRE>"; 
    print_r($show_session->qty); 
    die(); 
} 
+0

このエラーが発生しました。CustomersController.php行73でエラーが発生しました: 未定義のプロパティ:stdClass :: $ qty'行73は 'print_r($ show_session-> qty); ' – Isis

+0

です。 –

+0

私は持っています。たぶん私はそれを見たり、それを得ていないだけかもしれません。また、セッションをフラッシュすると、データはデータベースに残ります。 – Isis

1

あなたはJSONエンコードやデコードを使用しないでください。私はlaravelヘルパーを使用して好むとして、Session::は、理由はあなたがにそれをJSON-IZEするときにオブジェクトの情報を失うことであるsession()->

$customer_id = auth()->guard('customer_admin')->user()->id; 

$carts_tbl = DB::table('cart_session')->where(['customer_id' => $customer_id])->first(); 

if($carts_tbl->count() == 1) 
{ 
    session()->put('cart_session_test', $carts_tbl->data); 
} 

$show_session = session()->get('cart_session_test'); 

dd($show_session['qty']); 

になります。プロパティに直接アクセスすることもできます

CartSessionモデルでは、あなたが望む通りに$casts = ['data' => 'object']または$casts = ['data' => 'array']を追加します。あなたのケースでは、 '配列'は 'qty'が 'データ'フィールドの配列項目と思われるために行うべきです。そういうわけで、タイプジャグリングについて心配する必要はありません。ララヴェルはそれを世話します。より良い

cart_itemsテーブルを作成し、cart_sessionとOneToMany関係でそこにデータフィールドにある(cart_sessionsをする必要がありますが、それは大丈夫だ)何でも保存することです。後で大丈夫になり、アプリを簡単に構築できます。そこに行って、それをしてください。

+0

私は '定義されていないメソッドstdClass :: count()'を呼び出しています。このエラー – Isis

関連する問題