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