【问题标题】:many to many custom foreign key多对多自定义外键
【发布时间】:2014-05-15 07:53:20
【问题描述】:

我有三张桌子。像这样

mysql> desc users;
+----------------+------------------+------+-----+---------------------+----------------+
| Field          | Type             | Null | Key | Default             | Extra          |
+----------------+------------------+------+-----+---------------------+----------------+
| id             | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| email          | varchar(100)     | NO   | UNI | NULL                |                |
| password       | varchar(64)      | NO   |     | NULL                |                |
| remember_token | varchar(100)     | YES  |     | NULL                |                |
| created_at     | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at     | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
+----------------+------------------+------+-----+---------------------+----------------+
6 rows in set (0.00 sec)

mysql> desc languages;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| code        | varchar(2)       | NO   | MUL | NULL    |                |
| name        | varchar(100)     | NO   |     | NULL    |                |
| native_name | varchar(100)     | NO   |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> desc user_know_languages;
+---------------+------------------+------+-----+---------------------+----------------+
| Field         | Type             | Null | Key | Default             | Extra          |
+---------------+------------------+------+-----+---------------------+----------------+
| id            | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| user_id       | int(10) unsigned | NO   | MUL | NULL                |                |
| language_code | varchar(2)       | NO   | MUL | NULL                |                |
| read_id       | int(10) unsigned | NO   |     | 1                   |                |
| write_id      | int(10) unsigned | NO   |     | 1                   |                |
| speak_id      | int(10) unsigned | NO   |     | 1                   |                |
| created_at    | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at    | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
+---------------+------------------+------+-----+---------------------+----------------+
8 rows in set (0.00 sec)

我的用户模型是这样的

class User{
    public function knowLanguages()
    {
        return $this->belongsToMany('Language', 'user_know_languages', 'user_id', 'language_code');
    }
}

就是这样生成的sql

select `languages`.*, `user_know_languages`.`user_id` as `pivot_user_id`, `user_know_languages`.`language_code` as `pivot_language_code` from `languages` inner join `user_know_languages` on `languages`.`id` = `user_know_languages`.`language_code` where `user_know_languages`.`user_id` = ?

我想要 .... 在 languages.code = user_know_languages.language_code ... 上而不是 language.id = user_know_languages.language_code

有什么想法吗?

【问题讨论】:

    标签: sql laravel laravel-4 many-to-many eloquent


    【解决方案1】:

    这样定义主键:

    // Language model
    protected $primaryKey = 'code';
    

    【讨论】:

    • 不要忘记 protected 关键字。 :)
    猜你喜欢
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2018-07-04
    • 1970-01-01
    • 2021-06-15
    • 2018-08-13
    • 2019-02-09
    相关资源
    最近更新 更多