我有一张表Subscribers
和一张表Services
。 subscriber
可以有多个services
,service
可以有多个subscribers
。
唯一的问题是我无法通过订阅者获得任何服务。如果我查看SQL它确实有效。
订户通过pcs_id
连接到服务。
那么我怎样才能让“多对多”的关系发挥作用呢?
订阅者表:
| Column | Type | Key |
|--------|-------------|-----------------------------|
| id | Int | Primary Key, Auto increment |
| pcs_id | Varchar(50) | Unique Key |
| email | varchar | Unique Key |
服务表:
| Column | Type | Key |
|--------|---------|-----------------------------|
| id | int | Primary Key, Auto Increment |
| name | varchar | Unique Key |
service_subscriber表:
| Column | Type | Key |
|-------------------|-------------|-----------------------------|
| id | int | Primary Key, Auto Increment |
| subscriber_pcs_id | varchar(50) | Index |
| Service_id | int | Index |
订阅者模型:
public function Services() {
return $this->belongsToMany('App\Service', 'service_subscriber','subscriber_pcs_id','service_id');
}
服务模式:
public function Subscribers() {
return $this->belongsToMany('App\Subscriber', 'service_subscriber','service_id', 'subscriber_pcs_id');
}
如果我要求提供服务,我会得到一个空集;如果我要求SQL,我会得到一个有效的SQL字符串。
$subscriber = Subscriber::where('pcs_id', 'TEST_97988471')->first();
$services = $subscriber->Services()->toSql();
// SQL: select * from `services` inner join `service_subscriber` on `services`.`id` = `service_subscriber`.`service_id` where `service_subscriber`.`subscriber_pcs_id` = ?
我认为它与pcs_id
有关,它是一个字符串。
对于模型我无法关闭自动增量,因为否则我会失去其他地方需要的ID。
答案 0 :(得分:2)
将pcs_id
设为主键并添加订阅者模型:
protected $primaryKey = "pcs_id";
默认情况下,它假定id
为主键,而FOREIGN KEY subscriber_pcs_id
实际上指向PRIMARY KEY id
。