从laravel中的会话中获取值

时间:2017-04-24 12:15:52

标签: laravel laravel-5

我已在数据库中保存了一个会话,并且它中有一个以上的值。所以我试图从会话中获得数值。

我保存会话的代码

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

2 个答案:

答案 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但是它没问题)。它将在以后为您提供安全保障并简化您的应用程序构建。去过也做过。