【问题标题】:Receiving all parents as a Child将所有父母视为孩子
【发布时间】:2021-08-08 12:06:43
【问题描述】:

鉴于这些简单的表格:

家长

id child_id
1 1
2 1
3 2

儿童

id value
1 value_x
2 value_y
3 value_z

我希望能够让所有父母都成为关系。此方案中不涉及数据透视表。像这样的东西: [Child#1] -- 调用关系 parents() --> 接收 Parent#1 和 Parent#2

我认为解决这个问题的最接近的想法是使用 belongsToMany 关系 - 但我无法弄清楚要让它工作的确切参数调用。

[Edit] 为了更好地理解这个示例可能会有所帮助:假设 Parent 是文档扫描。这是由child的扫描仪制作的。所以扫描只能由一台扫描仪完成。但是扫描仪当然可以扫描多个文档。

非常感谢任何帮助

【问题讨论】:

  • 我敢打赌,应该是 hasMany。
  • 仔细检查一下,Parent 只能有一个Child,而Child 可以有多个Parents?
  • @Rwd 正确。我在描述中添加了一个简单的例子。

标签: laravel relationship


【解决方案1】:

当您有一个包含*_id 字段的表时,关系将是belongsTo,这反过来意味着另一个关系将是hasMany(或hasOne)。

NB 仅当您想要关联两个表时,即不通过数据透视表而不是多态关系时。

这就是关系的样子:

class Parent extends Model
{
    public child()
    {
        return $this->belongsTo(Child::class);
    }
}
class Child extends Model
{
    public parents()
    {
        return $this->hasMany(Parent::class);
    }
}

【讨论】:

  • 非常感谢。这行得通。我很惭愧没有尝试这个。哇
【解决方案2】:

数据库结构似乎不正确

子表应该有paren_id

创建一个父 Eloquent 模型类

<?php

 namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Parent extends Model
{
    public children()
    {
        return $this->hasMany(Child::class);
    }
}

创建一个子类

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Child extends Model
{
  public function parents()
   {
       return $this->belongsTo(Parent::class);
   }
}

你可以得到这样的父母

$data = Child::with('parents')->get();

【讨论】:

  • 离开问题中的示例,关系应该是相反的,即Child -> hasMany -> ParentParent -> belongsTo -> Child
  • 一列 parent_id 在这里不适用,因为一个孩子可以被多个父母使用。 (我知道这听起来很愚蠢,但它现在是如何设置架构的)
  • 好的,然后按照@Rwd 所说的方法反转,你就会得到数据
猜你喜欢
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多