Laravel从数据库中检索错误的值



我正试图使用一个种子程序来为工厂创建的用户提供"membro";(葡萄牙语成员(角色。因此,我在FuncoesFeeder中创建了如下角色(Funcoes=函数,或上下文中的角色(:

Funcao::create(['nome' => 'Administrador', 'descricao' => 'Todas as permissões sobre utilizadores e funcionalidades.'])->save();
Funcao::create(['nome' => 'Gestor', 'descricao' => 'Acesso a todas as funcionalidades.'])->save();
Funcao::create(['nome' => 'Membro', 'descricao' => 'Acesso à página principal.'])->save();

注:Funcao的主键是"nome">
然后我运行UtilizadoresSeeder(Utilizadores=用户(:

public function run()
{
$utilizador = Utilizador::create([
'nif' => 200000000, 'nome' => 'Name Surname', 'email' => 'name.surname@outlook.pt', 'telemovel' => 912345678,
'morada' => 'My address', 'codigo_postal' => '2100-123', 'localidade' => 'Ourém',
'data_admissao' => new DateTime('2000-10-09')
]);
$utilizador->funcoes()->attach('Administrador');
$utilizador->save();
$utilizadores = Utilizador::factory(20, new Sequence(fn ($sequence) => ['nif' => 100000000 + $sequence->index]))
->create(['password' => null]);
// Dictionary from Portuguese to English (even though the words are pretty similar)
// Descrição ("descricao" without special characters) - Description
// Funcao - Function (in this context is more like a role)
// funcoes - plural of funcao (functions/roles)
// Membro - Member
// Nome - Name
// utilizador(es) - user(s)
$funcao = Funcao::find('Membro'); //This works, and it should return a Funcao with ['nome' => 'Membro', 'descricao' => 'Acesso à página principal.']
echo ('NOME: ' . $funcao->nome . ' - DESCRIÇÃO: ' . $funcao->descricao . "nJSON: " . $funcao->toJson());
$funcao->utilizadores()->attach($utilizadores);
}

我不明白为什么,但是$funcao->nome返回0,而$funcao->描述是正确的。我使用的是MySQL数据库,一切似乎都很好,加上"$效用->函数((->attach("管理员"("工作非常好。我可能可以用前臂,比如

foreach ($utilizadores as $utilizador) {
$utilizador->funcoes()->attach('Membro');
}

但我想了解为什么会发生这种情况,是数据库问题吗
我做错了什么?

关系的定义和我仔细检查过的其他东西:
我搜索了拼写错误,但没有发现任何错误(我可能是盲人,但我不认为是这样(
Funcoes表
Funcao模型:

<?php
namespace AppModelsUtilizadores;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Funcao extends Model
{
use HasFactory;
protected $primaryKey = 'nome';
protected $table = 'funcoes';
public $timestamps = false;
protected $fillable = [
'nome',
'descricao'
];
public function utilizadores()
{
return $this->belongsToMany(Utilizador::class);
}
}

powershell 上的输出

由于您使用String类型属性作为主键,因此应该声明它,以便Laravel对此进行操作。

默认情况下,对于自动递增表,ID被假定为一个整数。通过添加:

protected $keyType = 'string';
public $incrementing = false;

对于您的Funcao模型,应该解决此问题。

最新更新