gpt4 book ai didi

laravel - 具有替代键的 Eloquent ManyToMany

转载 作者:行者123 更新时间:2023-12-02 16:59:55 25 4
gpt4 key购买 nike

我有一个表Subscribers 和一个表Services。一个订阅者可以有多个服务,一个服务可以有多个订阅者

唯一的问题是我无法获得订阅者的任何服务。如果我查看 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。

最佳答案

pcs_id 作为主键并添加到订阅者模型中:

protected $primaryKey = "pcs_id";

默认情况下,它假定id为主键,并且外键subscriber_pcs_id实际上指向主键id

关于laravel - 具有替代键的 Eloquent ManyToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com