AS 函数在 LARAVEL 数据库语句中不起作用

Posted

技术标签:

【中文标题】AS 函数在 LARAVEL 数据库语句中不起作用【英文标题】:AS function not working in LARAVEL database statement 【发布时间】: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 【参考方案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();

【讨论】:

以上是关于AS 函数在 LARAVEL 数据库语句中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有“LIKE”语句的雄辩查询在 Laravel 6 中不起作用

Laravel:布局中的脚本和图像源在带有前缀的url中不起作用

数据表的排序在laravel中不起作用

Laravel:array_push 在 collection->each() 迭代器中不起作用

嘲弄,App Instance 在某些 laravel 测试中不起作用

表单在 laravel 7 中不起作用,啥也没发生