Sql 多对多自定义外键
我有三张桌子。像这样Sql 多对多自定义外键,sql,laravel,laravel-4,many-to-many,eloquent,Sql,Laravel,Laravel 4,Many To Many,Eloquent,我有三张桌子。像这样 mysql> desc users; +----------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+------------------+
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');
}
}
我的用户模型是这样的
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');
}
}
它是这样生成的
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` = ?
我想要。。。。on languages.code=用户了解语言。语言\u代码。。。而不是languages.id=user\u know\u languages.language\u code
有什么想法吗?像这样定义主键:
// Language model
protected $primaryKey = 'code';
不要忘记受保护的
关键字。:)