雄辩的ORM多对多的关系

时间:2018-03-13 20:22:09

标签: php orm eloquent

我刚刚开始使用Eloquent ORM(没有Laravel)而且我遇到了多对多关系的问题。 我有一个表格,我存储Families(文章类别),另一个存储Articles,第三个存储为“数据透视”。我希望能够获得一个家庭拥有的所有文章,以及一篇文章所属的所有家庭。所以我编写了这个模型。

class Families extends Model {

public $table = 'Families';

    public function Articles() {
        return $this->belongsToMany('Articles', 'articles_families', 'families_id', 'articles_id');
    }

}

文章

class Articles extends Model {

public $table = 'Articles';

     public function Families() {
         return $this->belongsToMany('Families', null, 'articles_id', 'families_id');
     }

}

然后我试图检索这样的数据:

$families = Families::all();
echo $families[1]->Articles;

然而,它只返回一个空数组,它应该返回几篇文章。我已经三次检查三个表中的所有值都是正确的。如果我回应Eloquent查询调试器,我可以看到它正在寻找一个空值,我很确定这是问题,但我不知道如何解决它。这里:

{"query":"select * from `Families`","bindings":[],"time":49.13},{"query":"select `Articles`.*, `articles_families`.`families_id` as `pivot_families_id`, `articles_families`.`articles_id` as `pivot_articles_id` from `Articles` inner join `articles_families` on `Articles`.`id` = `articles_families`.`articles_id` where `articles_families`.`families_id` is null","bindings":[],"time":38.93}

空值在最后一个查询的末尾。

1 个答案:

答案 0 :(得分:0)

我自己就找到了解决方案。由于我的主键列称为Id,并且默认情况下Eloquent假定主键称为id,我需要通过添加类属性protected $primaryKey = "Id";来覆盖它,现在它会检索数据正常。