时间戳转换器

Laravel - Eloquent 连接

日期:2023-02-16     浏览:264    
【中文标题】Laravel - Eloquent 连接【英文标题】:Laravel - Eloquent Joins 【发布时间】:2014-10-18 22:46:54 【问题描述】:

我刚刚开始学习 laravel 及其 orm 系统,Eloquent。我不确定如何正确连接表格。我有 3 个模型:用户、帐户、帐户类型,但我不知道如何使用帐户类型加入帐户。

账户模型类:

public function accounttype()
    return $this->hasOne('AccountType');
 

这是传递帐户信息以供查看:

$accounts = User::find(Auth::user()->id)->accounts;
$accounts->load('accounttype');
return View::make('accounts.accounts')->with('accounts', $accounts);

这将给出以下错误:

SQLSTATE[42S22]:未找到列:1054 'where 子句'中的未知列'accounttypes.account_id'(SQL:select * from accounttypes where accounttypes.account_id in (1, 2, 3) )

它应该是通过 accounttypes 表中的 id 而不是 account_id 提取的。我可以列出用户帐户就好了,我只是不知道如何将帐户类型表加入帐户表。

数据库表:

用户

身份证 用户名 密码 时间戳(updated_at / created_at)

帐户

身份证 姓名 user_id accounttype_id 时间戳

帐户类型

身份证 姓名

每个用户可以拥有多个帐户,每个帐户都有一个帐户类型。

【问题讨论】:

这取决于您的database,显示每个Models 的数据库表。 您的accounts 和accounttype 是如何关联的?user 有多个帐户吗? 每个用户都有一个或多个帐户,每个帐户都有一个类型。 试试belongsTo而不是hasOne 【参考方案1】:

在User 模型中:

public function accounts()

    return $this->hasMany('Account');

在Account 模型中:

public function user()

    return $this->belongsTo('User');


public function accountType()

    return $this->belongsTo('AccountType', 'accounttype_id', 'id');

在AccountType 模型中:

public function accounts()

    return $this->hasMany('Account', 'accounttype_id', 'id');

然后在你的控制器中:

// This will return a user with all accounts ($user->accounts will be collection)
$user = User::with('accounts')->find(Auth::user()->id);

或者:

$user = User::with('accounts.accountType')->find(Auth::user()->id);

// You may pass the $user as well and then loop the $user->accounts in view
return View::make('accounts.accounts')->with('accounts', $user->accounts);

在您的view 中,您可以循环获取所有帐户,例如:

@foreach($accounts as $account)
     $account->name 
     $account->accountType->name 
@endforeach

由于$user->accounts 是一个集合,因此您可以运行loop 或专门使用以下方式获取帐户:

 $accounts->first()->name ; // Get first one's name
 $accounts->get(0)->name ; // Get first one's name
 $accounts->get(1)->name ; // Get second one's name
 $accounts->last()->name ; // Get last one's name

如果你像这样传递$user 而不是$accounts:

return View::make('accounts.accounts')->with('user', $user);

然后也改变循环,像这样:

@foreach($user->accounts as $account)
     $account->name 
     $account->accountType->name 
@endforeach

您可以在开始循环之前确定该用户是否在view 中拥有帐户,例如:

@if($user->accounts->count())
    // Loop Here
@endif

【讨论】:

快速提问,应该: $user = User::with('accounts')->find(Auth::user()->id);是 $user = User::with('accounts.accounttype')->find(Auth::user()->id);减少查询次数? 是的,你可以像这样得到accountType。

相关文章

如何使用 eloquent 在 laravel 中编写多个连接

{】如何使用eloquent在laravel中编写多个连接【英文标题】:howtowritemultiplejoininlaravelusingeloquent【发布时间】:2020-04-0713:03:30【问题描述】:我正在学习laravel。我想在laravel中使用eloquent编写以下查询:selectb.branch_name,w.branch_work_namefrom...}

如何使用 Laravel 4 Eloquent 连接列?

{】如何使用Laravel4Eloquent连接列?【英文标题】:HowtoconcatenatecolumnswithLaravel4Eloquent?【发布时间】:2014-03-2708:08:12【问题描述】:我有一个名为tenantdetails的表,其中包含Tenant_Id|First_Name|Last_Name|........我想通过MySQL的连接函数将First_...}

Laravel - 使用 Eloquent 从连接关系模型中选择特定列

{】Laravel-使用Eloquent从连接关系模型中选择特定列【英文标题】:Laravel-SelectspecificcolumnsfromjoinedrelationshipmodelsusingEloquent【发布时间】:2019-06-1500:01:37【问题描述】:我正在尝试从使用Eloquent连接的表中选择特定列。我有3个模型-交...}

使用 eloquent laravel 获取连接表数据

{】使用eloquentlaravel获取连接表数据【英文标题】:fetchjointabledatausingeloquentlaravel【发布时间】:2020-11-0623:19:27【问题描述】:我是laravel新手,想实现eloquent关系。让我解释一下。假设我有2张桌子产品product_idproduct_namebrand_idprice品...}

Laravel 5 - 用组合结果以 eloquent 连接 3 个表

{】Laravel5-用组合结果以eloquent连接3个表【英文标题】:Laravel5-Join3tablesineloquentwiththecombinationresult【发布时间】:2016-09-0806:52:01【问题描述】:**TableTask**idproject_iduser_id**TableProject**idproject_name**TableUser**idfnamelname我已经检查了下面的...}

Laravel Eloquent 连接多表

{】LaravelEloquent连接多表【英文标题】:LaravelEloquentJoinmultitables【发布时间】:2019-09-0601:36:56【问题描述】:我的雄辩加入有些问题。我有4个表关系贷款表/贷款loan_id|quantity|user_id1|4|1.详细贷款表/Loandetailsloandetail_id|loan_id|inventory_id...}

在 Laravel Eloquent 中连接表值

{】在LaravelEloquent中连接表值【英文标题】:JoinTableValuesinLaravelEloquent【发布时间】:2021-05-0906:58:20【问题描述】:我的控制器上有一个index()函数,它列出了我的所有用户。目前我可以列出所有用户以及用户的值,但我无法从另一...}

Laravel Eloquent:如何从连接表中仅获取某些列

{】LaravelEloquent:如何从连接表中仅获取某些列【英文标题】:LaravelEloquent:Howtogetonlycertaincolumnsfromjoinedtables【发布时间】:2013-01-2112:45:02【问题描述】:我在Eloquent中有2个连接表,即主题和用户。主题模型:publicfunctionuser()return$th...}

Laravel Eloquent 查询,带有连接、计数和分组依据

{】LaravelEloquent查询,带有连接、计数和分组依据【英文标题】:LaravelEloquentquerywithjoin,countandgroupby【发布时间】:2022-01-0803:17:56【问题描述】:我正在尝试重新制作此查询:returnDB::select(DB::raw("SELECTCOUNT(orders.id),nameFROMordersJOINusersO...}

如何使用 Laravel 的 Eloquent 关系与 Eager Loading 连接 3 个表?

{】如何使用Laravel的Eloquent关系与EagerLoading连接3个表?【英文标题】:Howtojoin3tableswithLaravel\'sEloquentrelationshipswithEagerLoading?【发布时间】:2019-07-0903:04:06【问题描述】:所以,order有一个foreign_keyoffer_id。而offer有一个foreign_keyitem_id...}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号