我需要使用电子邮件和电话号码作为 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)
“复合”主键 Eloquent 要求每个模型至少有一个唯一标识“ID”作为其主键。 Eloquent 模型不支持“复合”主键。但是,除了表的唯一标识主键之外,您还可以向数据库表添加额外的多列唯一索引。