2017-04-24 108 views
0

我已经在数据库中保存了一个会话,并且它有更多的一个值。所以我试图从会话中获得数量值。从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(); 

,我得到这个错误

ErrorException在CustomersController.php线81: 未定义的属性:stdClass的:: $数量

81行是

print_r($show_session->qty); 
+0

转储'$ show_session'变量。 –

+0

当我'DD($ show_session)'我得到'{#410▼ + “18d6934483b994fb9943b43b7d7646bf”:{#411▼ + “ROWID”: “18d6934483b994fb9943b43b7d7646bf” + “ID”: “8” + “名” :“Product 8” +“qty”:“2” +“price”:80 +“image”:“[”hot-dog.jpg“]” +“options”:[] +“tax “: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

我得到这个错误'ErrorException在CustomersController.php行73: 未定义的属性:stdClass :: $ qty'行73是'print_r($ show_session-> qty);' – Isis

+0

检查答案。 –

+0

我有。也许我只是没有看到它或得到它。另外当我刷新会话时,数据仍然在数据库中。 – Isis

1

你不应该使用JSON编码或解码。正如我喜欢使用laravel帮手,Session::成为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']); 

的原因是你失去对象信息,当您JSON-IZE它。您甚至可以直接访问属性session()->get('cart_session_test')['qty']

在您的CartSession模型中添加:$casts = ['data' => 'object']$casts = ['data' => 'array'],具体取决于您的需要。在你的情况'数组'应该做'QTY'似乎是'数据'字段的数组项。因此,您不必担心类型杂耍。 Laravel会照顾到这一点。

更好的将是使一个cart_items表和保存无论是在数据字段中有与cart_session一个一对多的关系(应该是cart_sessions但它的确定)。这会在以后安全地避免很多麻烦,并简化构建应用程序。去过也做过。

+0

我一直在'调用未定义的方法stdClass :: count()'这个错误 – Isis