【问题标题】:Laravel Belongs to many returning emptyLaravel 属于多返空
【发布时间】:2023-04-07 02:25:02
【问题描述】:

我在返回属于许多关系时遇到问题。这是我的场景。我有“Individual”模型和“Group”模型,其中每个个人可以属于多个组,每个组可以属于多个用户。使用诸如“localhost/phpmyadmin”之类的数据库蓝图很好,因为我可以单击“group_individual”表上的“组”列,它会返回到“组”表上的相关组。但是在 Laravel 中工作,我得到的是空数组。你能帮我吗?感谢您的宝贵时间。

迁移

Schema::create('groups', function (Blueprint $table) {
    $table->id();
    $table->string('group_id')->unique();
    $table->string('name');
    $table->unsignedBigInteger('members');
    $table->string('url')->nullable();
    $table->timestamps();
});

Schema::create('individuals', function (Blueprint $table) {
    $table->id();
    $table->string('search_id')->unique();
    $table->timestamps();
});

Schema::create('group_individual',function($table){
    $table->id();
    $table->string('group');
    $table->string('individual');
    $table->foreign('group')->references('group_id')->on('groups')->onDelete('cascade');
    $table->string('type');
    $table->foreign('individual')->references('search_id')->on('individuals')->onDelete('cascade');
});

个体模型

public function groups():\Illuminate\Database\Eloquent\Relations\BelongsToMany
{
    return $this->belongsToMany(Group::class,'group_individual','individual','group');
}

组模型

public function individuals():\Illuminate\Database\Eloquent\Relations\BelongsToMany
{
    return $this->belongsToMany(Individual::class,'group_individual','group','individual');
}

控制器

public function import(){
    Individual::create([]);
    Group::create([]);
    \DB::table('group_individual')->insert(['group'=>,'individual'=>,'type'=>]);
    $individual=Individual::find(1);
    dd($individual->groups);
}

来自上述控制器的$individual->groups 返回空数组。

【问题讨论】:

    标签: php laravel eloquent many-to-many


    【解决方案1】:

    我找到了解决方案。我尝试使用两个表的 id 而不是自定义其他属性。 这是我使用的代码。我没有使用 DB::insert() 方法,而是使用 attach 方法。

    迁移

    Schema::create('groups', function (Blueprint $table) {
                $table->id();
                $table->string('group_id')->unique();
                $table->string('name');
                $table->unsignedBigInteger('members');
                $table->string('url')->nullable();
                $table->timestamps();
            });
         
        Schema::create('individuals', function (Blueprint $table) {
                    $table->id();
                    $table->string('search_id')->unique();
                    $table->timestamps();
                });
        Schema::create('group_individual',function($table){
                   $table->foreignId('group_id')->constrained()->onDelete('cascade');
                   $table->foreignId('individual_id')->constrained()->onDelete('cascade');
                   $table->string('type');
                });
    

    个人模特

    public function groups(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
        {
            return $this->belongsToMany(Group::class,'group_individual','individual_id','group_id');
        }
    

    组模型

    public function individuals(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
        {
            return $this->belongsToMany(Individual::class,'group_individual','group_id','individual_id');
        }
    

    控制器

    $a=Individual::create();
    $b=Group::create();
    $a->groups()->attach($b->id);
    

    【讨论】:

      【解决方案2】:

      看起来你已经反转了 ID 键,尝试在 belongsToMany 方法中切换“组”和“个人”

      【讨论】:

      • 我尝试过像“return $this->belongsToMany(Group::class,'group_individual','group','individual');”这样的个人模型,但仍然返回空数组。
      • 可能是个愚蠢的问题,但组、个人和 group_individual 表是否填充了可用于 laravel 的数据?
      • 是的,我有可用的数据。它们都已成功导入,但无法通过代码访问。我已经测试了多对多的关系,只有 id 就像在 Laravel 文档中一样,而不是之前的其他属性。
      • 我不知道是不是因为键是字符串类型或键名。我在玩这些条件。如果您有任何想法,请告诉我。
      猜你喜欢
      • 2021-07-19
      • 1970-01-01
      • 2021-03-02
      • 2014-04-10
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 2016-08-07
      相关资源
      最近更新 更多