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:array_push 在 collection->each() 迭代器中不起作用