我已在数据库中保存了一个会话,并且它中有一个以上的值。所以我试图从会话中获得数值。
我保存会话的代码
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并且我回应它时,我得到了
阵 ( [data] => {" 18d6934483b994fb9943b43b7d7646bf" {" ROWID":" 18d6934483b994fb9943b43b7d7646bf"" ID":" 8"&#34 ;姓名":"产品8","数量":" 2","价格":80,"图像& #34;:" [\"热dog.jpg \"]""选择":[],"税" :16.8,"小计":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 :: $ qty
第81行
print_r($show_session->qty);
答案 0 :(得分: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();
}
答案 1 :(得分: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']
。在你的情况下&#39;阵列&#39;应该做的&#39;数量&#39;似乎是数据&#39;的数组项目。领域。因此,您不必担心类型杂耍。 Laravel将负责这一点。
最好是制作一个cart_items
表并保存与cart_session
的OneToMany关系中的数据字段中的任何内容(应该是cart_sessions
但是它没问题)。它将在以后为您提供安全保障并简化您的应用程序构建。去过也做过。