如何在 Laravel 中通过 Spatie Roles and Permissions 包正确使用复合键作为主键?

问题描述 投票:0回答:1

我需要使用电子邮件和电话号码作为 Laravel 应用程序中用户模型的主键。由于 Laravel 本身不支持复合主键,因此我找到了一种解决方法来实现它。但是,我面临着关系问题,尤其是在使用 Spatie 角色和权限包时。具体来说,我收到“数组到字符串转换”错误。还面临 auth()->user() 辅助函数的问题,该函数返回意外的结果。

这是我的设置:

用户型号:

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Database\Eloquent\Builder;

class User extends Authenticatable
{
    use HasRoles;

    public $incrementing = false;
    protected $keyType = 'string';
    protected $primaryKey = ['email', 'phone_number'];
    
    protected $fillable = ['email', 'phone_number', 'name', 'password'];
}

问题: 当访问$user->roles等关系时,遇到以下错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from `users` where (`0` = email and `1` = phone_number) and `users`.`deleted_at` is null limit 1)
php mysql laravel eloquent
1个回答
0
投票

laravel 文档

“复合”主键 Eloquent 要求每个模型至少有一个唯一标识“ID”作为其主键。 Eloquent 模型不支持“复合”主键。但是,除了表的唯一标识主键之外,您还可以向数据库表添加额外的多列唯一索引。

© www.soinside.com 2019 - 2024. All rights reserved.