首页 文章

雄辩的ORM多对多的关系

提问于
浏览
0

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

家庭

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

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

相关问题