获得关系数据的最佳方式是什么?

时间:2015-11-05 14:45:16

标签: php laravel orm laravel-5.1

我需要一些帮助才能找到从下表结构中获取数据的最佳方法。

表一:组织ID名称等。

表二:位置ID名称等。

表三: organisaiton_locations此表包含如下关系:

id | organisation_id | location_id
  • id :自动增加
  • organisation_id 对组织表上的ID的外键引用
  • location_id 对位置表上的ID的外键引用

Whey我尝试使用hasManyThrough,我得到了正确数量的项目,但它们被映射到 id 而不是 location_id

class Organisation extends Model
{

    public function locations()
    {
        return $this->hasManyThrough('App\Models\Location', 'App\Models\OrganisationLocation', 'organisation_id', 'id');
    }

}

您能帮我理解如何获取集合中与组织相关的所有位置,以便可以在变压器中使用。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您不必使用hasManyThough只使用正常的,通过您正试图访问第三级关系,在您的情况下,它是不

只需将其替换为:

class Organisation extends Model
{

     public function locations(){
         return $this->hasMany(Location::class,'organisaiton_locations', 'organisation_id', 'location_id')->withTimestamps();
     }

}

请记住导入你的Location类(hasMany函数中的第一个参数)或者只是将它用作字符串,就像你做的那样

如果您的联结表中没有时间戳,请从上面的代码->withTimestamps()

的末尾删除

答案 1 :(得分:0)

我的一个朋友建议使用ManyToMany与这种表关系的关系,它的作品很完美。如果您遇到类似这样的问题,请按字母顺序使用具有正确表名的ManyToMany,并且它可以按照框架工作,没有任何黑客攻击。

干杯!!