gpt4 book ai didi

php - Laravel 一对多关系不起作用 - 返回递归

转载 作者:行者123 更新时间:2023-12-04 08:05:33 26 4
gpt4 key购买 nike

我正在使用 Laravel 8 开发应用程序,但遇到了非常奇怪的行为。
我有一个名为“组织”的模型,该组织有很多用户(来自 Jetstream 的模型)。
我像往常一样处理关系:
在组织模型中:

    public function users()
{
return $this->hasMany(User::class);
}

在用户模型中:
 public function organisation()
{
return $this->belongsTo(Organisation::class);
}
我在用户表上有一个名为 organization_id 的字段,它在迁移中声明为:
 $table->foreignId('organisation_id')->nullable()->constrained();
我检查了数据库,所有内容都已填写,没有空值。
预期结果:
如果我打电话
  $testUser=User::find(1);
$testOrg=$testUser->organisation();
我会得到组织对象。
实际结果:
我收到了一个 veeeeeery 日志对象,说明了包括 RECURSION 在内的内容,而不是我想要的组织。这是关于外键的错误吗? User 模型也有一个与不同模型的belongsToMany 关系,这是标准belongsTo 的方式吗?
编辑
我可以在打电话时接听组织
  $testUser=User::with('organisation')->find(1);
但这不是我想要使用的干净的 Laravel 方式。
我用 $testOrg=$testUser->organisation()->toSql(); 调试了查询;
它向我展示了:
string(60) "select * from organisations where organisations . id = ?",
那么“哪里”错了?
任何提示或帮助将不胜感激
这是一些输出:(整个输出太长)

NULL ["remember_token"]=> NULL ["current_team_id"]=> NULL["profile_photo_path"]=> NULL ["created_at"]=> NULL ["updated_at"]=>NULL ["organisation_id"]=> int(1) } ["changes":protected]=> array(0) {} ["classCastCache":protected]=> array(0) { } ["dates":protected]=>array(0) { } ["dateFormat":protected]=> NULL["dispatchesEvents":protected]=> array(0) { }["observables":protected]=> array(0) { } ["relations":protected]=>array(0) { } ["touches":protected]=> array(0) { } ["timestamps"]=>bool(true) ["visible":protected]=> array(0) { }["guarded":protected]=> array(1) { [0]=> string(1) "*" }["rememberTokenName":protected]=> string(14) "remember_token"["accessToken":protected]=> NULL } ["foreignKey":protected]=>string(15) "organisation_id" ["ownerKey":protected]=> string(2) "id"["relationName":protected]=> string(12) "organisation"["query":protected]=>object(Illuminate\Database\Eloquent\Builder)#1386 (8) {["query":protected]=> object(Illuminate\Database\Query\Builder)#1388(22) { ["connection"]=>object(Illuminate\Database\MySqlConnection)#1353 (18) {["pdo":protected]=> object(PDO)#1364 (0) { } ["readPdo":protected]=>NULL ["database":protected]=> string(7) "laravel"["tablePrefix":protected]=> string(0) "" ["config":protected]=>array(15) { ["driver"]=> string(5) "mysql" ["host"]=> string(9)"127.0.0.1" ["port"]=> string(4) "3306" ["database"]=> string(7)"laravel" ["username"]=> string(4) "root" ["password"]=> string(0) ""["unix_socket"]=> string(0) "" ["charset"]=> string(7) "utf8mb4"["collation"]=> string(18) "utf8mb4_unicode_ci" ["prefix"]=> string(0)"" ["prefix_indexes"]=> bool(true) ["strict"]=> bool(true)["engine"]=> NULL ["options"]=> array(0) { } ["name"]=> string(5)"mysql" } ["reconnector":protected]=> object(Closure)#132 (2) {["this"]=> object(Illuminate\Database\DatabaseManager)#40 (5) {["app":protected]=> object(Illuminate\Foundation\Application)#2 (35) {["basePath":protected]=> string(38)"C:\xampp\htdocs\wiederverkaufen-portal"["hasBeenBootstrapped":protected]=> bool(true) ["booted":protected]=>bool(true) ["bootingCallbacks":protected]=> array(2) { [0]=>object(Closure)#195 (2) { ["static"]=> array(1) { ["instance"]=>object(Illuminate\Queue\QueueServiceProvider)#189 (3) {["app":protected]=> RECURSION ["bootingCallbacks":protected]=>array(0) { } ["bootedCallbacks":protected]=> array(0) { } } }["this"]=> RECURSION } [1]=> object(Closure)#338 (2) { ["static"]=>array(1) { ["instance"]=>object(Illuminate\Cache\CacheServiceProvider)#332 (3) {["app":protected]=> RECURSION ["bootingCallbacks":protected]=>array(0) { } ["bootedCallbacks":protected]=> array(0) { } } }["this"]=> RECURSION } } ["bootedCallbacks":protected]=> array(1) {[0]=> object(Closure)#340 (1) { ["this"]=>object(App\Providers\RouteServiceProvider)#164 (5) {["namespace":protected]=> NULL ["loadRoutesUsing":protected]=>object(Closure)#341 (1) { ["this"]=> RECURSION } ["app":protected]=>RECURSION ["bootingCallbacks":protected]=> array(0) { } ["bootedCallbacks":protected]=> array(1) { [0]=> object(Closure)#165(1) { ["this"]=> RECURSION } } } } }["terminatingCallbacks":protected]=> array(0) { }["serviceProviders":protected]=> array(34) { [0]=>object(Illuminate\Events\EventServiceProvider)#6 (3) {["app":protected]=> RECURSION ["bootingCallbacks":protected]=>array(0) { } ["bootedCallbacks":protected]=> array(0) { } } [1]=>object(Illuminate\Log\LogServiceProvider)#8 (3) { ["app":protected]=>RECURSION

最佳答案

尝试这个:

 $testUser=User::with('organisation')->find(1);
如果你想继续你的方式,然后更新到这个:
$testUser=User::find(1);
$testOrg=$testUser->organisation;

关于php - Laravel 一对多关系不起作用 - 返回递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66239558/

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