我是Laravel的新手,我使用laravel 5.4版本。 我有下一个场景:我有一个用户表,我只输入用户名和通行证,另外两个表是员工和合作伙伴,我保存用户的所有数据,如姓名,地址,电子邮件,电话....
表格结构:
users - id | username | password | userable_id | userable_type
员工 - id |姓名|电话|电子邮件|工资|职位| departamnet
合作伙伴 - id | name | companyname
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');
}
}
现在,如果我在修补程序中执行此操作(App \ User :: first() - > userable)将仅为第一个用户返回Employee / Partner的数据。对于all()或get()方法将返回此:
应用\用户::所有() - > userable 此集合实例上不存在消息'Property [userable]的异常。 应用程序\用户::得到() - > userable 此集合实例上不存在消息'Property [userable]的异常。'
使这个适用于所有用户列表是否有任何变化? PS:在userable_type上的users表中,我有一个Model,在userable_id上我有一个与模型对应的行id,例如Employee和1.提前感谢。
答案 0 :(得分:1)
我相信,既然您收集了所有用户,那么问题是您需要急切加载关系以获得您想要的内容
App\User::with('userable')->get();
我不是在我的工作站测试这个atm,但是如果内存对我有用,那应该可行。当我可以测试时,我会更新它