【问题标题】:AS function not working in LARAVEL database statementAS 函数在 LARAVEL 数据库语句中不起作用
【发布时间】:2020-04-25 16:51:48
【问题描述】:

我想在我的 Laravel 项目中加入两个表,但我使用的两个表中的任何相同字段名称。

用户表:

  • 身份证
  • 姓名
  • 性别

性别表:

  • 身份证
  • 姓名

所以我像这样在 Controller 中创建连接函数:

$account = DB::table('users')
                            ->join('genders','genders.id', '=','users.gender')
                            ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
                            ->where('users.id',$id)->get()->first();

在我的刀片中,我使用它来获取用户表中的字段名称:

{{ $account->users_name }}

但我收到这样的错误通知:

试图获取非对象的属性'users_name'

任何人都可以帮助我我该怎么办?谢谢。

【问题讨论】:

  • 仍然无法正常工作@SalmanZafar

标签: database laravel laravel-blade laravel-query-builder laravel-6


【解决方案1】:

使用名称而不是用户名

尝试使用 print_r() 调试代码,会有两个不同的数组具有相同的字段 所以如果你想使用用户名,那么你的代码应该是这样的

{{ $account->name }}

如果你想要性别名称,那么名称应该在性别数组中,这样你就可以在刀片文件中使用如下所示的性别名称

{{ $account->genders['name'] }}

编辑以上代码

$account = DB::table('users')
                            ->join('genders','genders.id', '=','users.gender')
                            ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
                            ->where('users.id',$id)->first();

【讨论】:

  • 你能告诉我你在 $account 中得到了什么吗?
【解决方案2】:

我认为您的用户可能没有性别记录,

尝试使用左连接:

$account = DB::table('users')
                            ->leftjoin('genders','genders.id', '=','users.gender')
                            ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
                            ->where('users.id',$id)->first();

【讨论】:

  • 可以,但是如果使用leftjoin,我无法显示{{ $account->genderrs_name }}
  • @AbuUbaidillah 因为没有用户对性别的性别参考
  • @AbuUbaidillah 您需要使用$id为用户添加性别
【解决方案3】:

如果您使用get() 方法,您将获得多条记录。

使用 get();

$accounts = DB::table('users')
           ->join('genders','genders.id', '=','users.gender')
           ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
           ->where('users.id',$id)->get();

刀片文件

@foreach($accounts as $account)
    {{ $account->users_name }}
@endforeach

使用 first() 你只会得到一个集合。

$accounts = DB::table('users')
           ->join('genders','genders.id', '=','users.gender')
           ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
           ->where('users.id',$id)->first();

刀片文件

{{ $account->users_name }}

【讨论】:

    【解决方案4】:

    似乎在数据库中找不到这样的记录 - 这就是您收到此错误的原因,因为 $account 为空。

    确保查询生成有效结果并在显示帐户之前添加条件,如下所示:

    @if ($account)
       // here display account
    @endif
    

    或在您的控制器中更改

    ->first()
    

    进入

    ->firstOrFail()
    

    如果您在找不到帐户时不想采取进一步行动。

    事实上,而不是:

    ->where('users.id',$id)->get()->first()
    

    你可以使用:

    ->where('users.id',$id)->first();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-24
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多