【问题标题】:Laravel One to One Polymorphic RelationLaravel 一对一多态关系
【发布时间】:2019-07-25 12:09:35
【问题描述】:

共有 3 个模型及其各自的表格

1.客户 - id、姓名

2.Address - id, name

3.ExternalMapping - model_id、model_type、external_id

如何在 Customer 模型中定义关系,以在 ExternalMapping 模型中为我提供 external_id?

我试过了,但是没用

class Customer extends Model
{
    public function cascades()
    {
        return $this->morphMany('App\ExternalMapping', 'external');
    }
}

class ExternalMapping extends Model
{
    public function external()
    {
        return $this->morphTo();
    }
}

【问题讨论】:

  • 我认为您应该查看有关多态关系的文档:laravel.com/docs/5.8/…
  • 我尝试使用上面的代码阅读文档,但无法正常工作。你能帮我吗? @Unflux

标签: php laravel orm


【解决方案1】:

您需要一对一的多态关系。不是一对多的关系。就这样吧。

 class Customer extends Model
  {
    public function cascade()
    {
        return $this->morphOne('App\ExternalMapping', 'external');
    }
  }

 class ExternalMapping extends Model
 {
    public function external()
    {
        return $this->morphTo();
    }
 }

 print_r($customer->cascade->external_id;)

【讨论】:

    【解决方案2】:

    您在 Customer 类上引用的列不正确,您应该引用 model 列而不是当前的 external 列:

    class Customer extends Model
    {
        public function cascades()
        {
            return $this->morphMany('App\ExternalMapping', 'model');
        }
    }
    

    这将告诉 Laravel 在您的 ExternalMapping 表中查找名称为 model_id 的列,其 id 值与当前 Customer 相同。

    然后去抢external_id

    $customer->cascades->external_id;
    

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 2018-10-03
      • 2018-04-20
      相关资源
      最近更新 更多