如何在Laravel中使用所有行的多态关系?

时间:2017-02-22 14:17:53

标签: php mysql laravel laravel-5 relationship

我是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.提前感谢。

1 个答案:

答案 0 :(得分:1)

我相信,既然您收集了所有用户,那么问题是您需要急切加载关系以获得您想要的内容

App\User::with('userable')->get();

我不是在我的工作站测试这个atm,但是如果内存对我有用,那应该可行。当我可以测试时,我会更新它