【问题标题】:How to check current user in laravel如何在laravel中检查当前用户
【发布时间】:2017-08-15 05:47:16
【问题描述】:

我想知道如何查看当前用户是否有订单?如果有显示列表,如果没有显示消息?

目前我正在使用它,但效果不佳:

  @if (empty(Auth::user()->order))
        <blockquote>
            <h1>Sorry you have no order at the moment, would you like to check out our products?</h1>
            <footer><a href="{{route('shop')}}">Click here</a></footer>
        </blockquote>
      @else
.......

@endif

用户模型:

public function order(){
       return $this->hasMany(Order::class);
    }

订购型号:

public function user(){
     return $this->belongsTo(User::class);
  }

显示订单历史视图的控制器:

public function index()
    {
      $user = Auth::user();
      $orders = Order::where("user_id", "=", $user->id)->orderby('id', 'desc')->paginate(10);
      return view('users.orders', compact('user', 'orders'));
    }

【问题讨论】:

  • 你能描述一下“它不能很好地工作”是什么意思吗?你的数据库的结构是什么?除此之外,从视图中访问模型是违反 MVC 原则的,请在控制器中设置一个布尔值,以指示是否存在顺序。
  • @DanielAlexandrov 我的意思是当用户没有订单时它会显示我的表格而不是显示文本(在我的代码中),我想使用order 表检查登录的用户 ID,如果登录的用户id 与订单表中的任何订单匹配 显示他/她的订单列表,否则显示 s(he) 没有任何订单的文本。
  • 可以统计订单数:Auth::user()->orders->count()
  • @M1Ö 请将您的评论作为答案,以便我批准。谢谢。

标签: php laravel laravel-blade


【解决方案1】:

您可以使用以下方式计算订单:

Auth::user()->orders->count()

【讨论】:

    【解决方案2】:

    要让这个工作有几个先决条件:

    1. 拥有正确的数据库架构
    2. relations设置(看来你需要one-to-many

    如果你有这个并假设你的关系设置为:

    class User extends Model{
        /**
         * Get the orders for the user
         */
        public function orders(){
            return $this->hasMany('App\Order');
        }
    }
    

    您可以使用 forelse 刀片语法

    @forelse (Auth::user()->orders as $order)
        <li>{{ $order->title }}</li>
    @empty
        <blockquote>
            <h1>Sorry you have no order at the moment, would you like to check out our products?</h1>
            <footer><a href="{{route('shop')}}">Click here</a></footer>
        </blockquote>
    @endforelse
    

    这将创建一个for 循环,您可以在其中为您的订单声明 html 布局。如果没有订单,则将使用 empty 块。

    【讨论】:

    • @RobertNicjoo 那么我想你没有设置正确的关系,你能编辑你的原始问题以包含你的用户类
    • 你试过调试输出吗?控制器中的 dd($orders) (在 return 之前)产生了什么?
    • 已由@if (Auth::user()-&gt;order-&gt;count() ) 修复,谢谢。欣赏它。
    • 这意味着您的“错误”只是一个拼写错误,如果您将Auth::user()-&gt;orders 替换为Auth::user()-&gt;order,我的答案将有效。很高兴为您提供帮助
    • 你的答案有一个大问题,除了拼写错误和你试图循环,那就是forelse我不知道为什么,但似乎 laravel 不知道这个查询forelse!无论如何,谢谢。
    猜你喜欢
    • 2015-04-14
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2015-02-07
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多