【发布时间】:2017-11-09 18:24:54
【问题描述】:
我有一个模型联系人,可以有很多分类,我也有一个分类模型,可以在很多联系人中展示。所以你猜到了,我已经建立了数据透视表,对我来说它的名字是classificationContact(是的,没有蛇盒,只是骆驼)。
这是 Contact 模型定义:
<?php
class Contact extends Model {
// ...
public function classifications() {
return $this->belongsToMany('App\Classification')
->using('App\ClassificationContact')
->withPivot('created_at');
}
}
?>
分类(但我们不注意,我只想通过我的联系人访问我的分类):
<?php
class Classification extends Model {
// ...
}
?>
我的数据透视表有一个模型:
<?php
class ClassificationContact extends Pivot {
// ...
protected $table = 'classificationContact'; // not taken into acount !
}
?>
问题
查询我的关系时,例如App\Contact::find(1)->classifications,Laravel 生气提示:
未找到基表或视图:1146 表“test.classification_contact”不存在
我知道 Laravel 默认情况下会蛇形数据透视表,但是当我覆盖 protected $table 属性时,我认为他会得到这个,但我可能会错过一些东西?
问题
在使用->using() 方法时,如何为数据透视表模型强制使用表名?
注意
我需要通过一个模型而不是使用 belongsToMany 的第二个参数,因为我的模型确实有一个外键引用更新联系人分类的用户:
<?php
class ClassificationContact extends Pivot {
// ...
protected $table = 'classificationContact';
public function user() {
// Need to be able to do
// App\Contact::find(1)->classifications->first()->user->firstname
return $this->belongsTo('App\User');
}
}
?>
注意 2
这是我要建模的数据库:
注意 3
当我重新查看我的数据库时,我发现我不仅需要 classification 和 model 出现在我的 Pivot 中,还需要 user!所以我们面临着一个三键数据透视表。这是我更正的数据库架构:
这里是 Laravel 5.4
【问题讨论】:
标签: php pivot laravel-5.4 laravel-eloquent