【发布时间】:2026-01-19 04:55:01
【问题描述】:
我正在尝试与 Eloquent 建立 hasManyTrough 关系,但从文档中不清楚它是如何工作的。
表格:
users
- id
- firstname
- ...etc
accounts
- id
- user_id
- username
- ...etc
roles
- id
- permissions
account_role
- id
- account_id
- role_id
模型
<?php
class User extends Eloquent {
public function account()
{
return $this->hasOne('Account');
}
// This is what I'm trying to achieve
public function roles()
{
return $this->hasManyThrough('Role', 'Account');
}
}
class Role extends Eloquent {
public function accounts()
{
return $this->belongsToMany('Account')->withTimestamps();
}
}
class Account extends Eloquent {
public function user()
{
return $this->belongsTo('User');
}
}
错误和问题
我得到的错误是:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'roles.account_id' in 'on clause'
我知道我可以做某事$user->account->roles,但我希望能够做某事$user->roles。如何正确设置?
【问题讨论】:
-
hasManyThrough不适用于多对多关系,请查看此答案:*.com/questions/23788844/…。如果您仍有疑问,请随时提问。 -
不错的解决方法,但我需要预先加载才能使用 User 模型。也许有一个解决方案来定义我自己的
Relation或其他东西。不过不知道该怎么做。 -
当然你可以扩展 Eloquent 并创建自定义关系、模型方法和其他东西。这取决于你,我链接的答案应该让你知道如何做到这一点。我对
belongsToThrough做的完全一样。
标签: laravel laravel-4 eloquent