我刚刚开始使用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}
空值在最后一个查询的末尾。
答案 0 :(得分:0)
我自己就找到了解决方案。由于我的主键列称为Id
,并且默认情况下Eloquent假定主键称为id
,我需要通过添加类属性protected $primaryKey = "Id";
来覆盖它,现在它会检索数据正常。