【问题标题】:How to use Polymorphic Relations in Laravel with all rows?如何在 Laravel 中对所有行使用多态关系?
【发布时间】: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。提前致谢。

【问题讨论】:

    标签: php mysql laravel laravel-5 relationship


    【解决方案1】:

    我相信,由于您正在获取所有用户的集合,问题是您需要急切加载关系才能获得所需的内容

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

    我不在我的工作站测试这个自动取款机,但如果记忆对我有用,那应该可以工作。当我可以测试它时,我会更新它

    【讨论】:

    • 谢谢!我之前只在代码中尝试过这个,而不是在 Tinker 中。在看到 tinker 的响应后,我意识到代码有问题...
    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 2020-11-14
    • 1970-01-01
    • 2017-05-31
    • 2019-03-03
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多