如何在 Laravel 中对所有行使用多态关系?
Posted
技术标签:
【中文标题】如何在 Laravel 中对所有行使用多态关系?【英文标题】:How to use Polymorphic Relations in Laravel with all rows? 【发布时间】:2017-07-12 15:39:36 【问题描述】:我是 Laravel 新手,我使用的是 laravel 5.4 版本。 我有下一个场景:我有一个用户表,我只输入用户名和密码,还有另外两个表员工和合作伙伴,我保存用户的所有数据,如姓名、地址、电子邮件、电话......
表结构:
用户 - id|用户名|密码|userable_id|userable_type 员工 - id|name|phone|email|salary|position|departamnet 合作伙伴 - id|名称|公司名称
In User model:
class User extends Authenticatable
public function userable()
return $this->morphTo();
Class Model:
class Employee extends Model
protected $fillable = [];
public function users()
return $this->morphOne('App\User', 'userable');
Partner Model:
class Partner extends Model
protected $fillable = [];
public function users()
return $this->morphOne('App\User', 'userable');
现在,如果我在 tinker 中执行此 (App\User::first()->userable ),将只为第一个用户返回来自 Employee/Partner 的数据。 for all() 或 get() 方法将返回:
App\User::all()->用户可用 消息“此集合实例上不存在属性 [userable]”的异常。 应用\用户::get()-> 用户可用 消息“此集合实例上不存在属性 [userable]”的异常。
让它适用于所有用户列表有什么改变吗? PS:在 userable_type 上的 users 表中,我有一个模型,而在 userable_id 上,我有与模型对应的行 id,例如 Employee 和 1。提前致谢。
【问题讨论】:
【参考方案1】:我相信,由于您正在获取所有用户的集合,问题是您需要急切加载关系才能获得所需的内容
App\User::with('userable')->get();
我不在我的工作站测试这个自动取款机,但如果记忆对我有用,那应该可以工作。当我可以测试它时,我会更新它
【讨论】:
谢谢!我之前只在代码中尝试过这个,而不是在 Tinker 中。在看到 tinker 的响应后,我意识到代码有问题...以上是关于如何在 Laravel 中对所有行使用多态关系?的主要内容,如果未能解决你的问题,请参考以下文章