【问题标题】:Laravel 5.4.x ignores using method for pivot table definitionLaravel 5.4.x 忽略了使用数据透视表定义的方法
【发布时间】: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)-&gt;classifications,Laravel 生气提示:

未找到基表或视图:1146 表“test.classification_contact”不存在

我知道 Laravel 默认情况下会蛇形数据透视表,但是当我覆盖 protected $table 属性时,我认为他会得到这个,但我可能会错过一些东西?

问题

在使用-&gt;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

当我重新查看我的数据库时,我发现我不仅需要 classificationmodel 出现在我的 Pivot 中,还需要 user!所以我们面临着一个三键数据透视表。这是我更正的数据库架构:

这里是 Laravel 5.4

【问题讨论】:

    标签: php pivot laravel-5.4 laravel-eloquent


    【解决方案1】:

    将第二个参数添加到belongsToMany 与表名。

    $this->belongsToMany('App\Classification', 'classificationContact')
         ->using('App\ClassificationContact');
    

    【讨论】:

    • 可能不是最好的情况,因为我的数据透视表确实有一个我需要访问的外键(用户绑定到“classificationContact”)。我会把它添加到我的问题中,谢谢你的时间。
    • 这在你强制使用表名时有效,但using() 中提供的模型仍然被忽略,太奇怪了!
    猜你喜欢
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    相关资源
    最近更新 更多