首页 > 解决方案 > Laravel 7 一对多关系?

问题描述

以下是所有模型、迁移和控制器。

捐赠模式

class Donation extends Model
{
    protected $guarded =[];

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

    public function items(){
        return $this->belongsTo(DonationItems::class);
    }
}

捐赠物品型号:

class DonationItems extends Model
{
    protected $guarded=[];

    public function donation(){
        return $this->hasMany(Donaition::class);
    }
}

捐赠物品迁移:

public function up()
{
    Schema::create('donation_items', function (Blueprint $table) {
        $table->id();
        $table->string('category');
        $table->timestamps();
    });
}

捐赠迁移:

public function up()
{
    Schema::create('donations', function (Blueprint $table) {
        $table->id();
        $table->string('item');
        $table->unsignedInteger('user_id');
        $table->unsignedInteger('donation_item_id');
        $table->timestamps();
    });
}

在我的控制器中,我想访问以下项目:

$don = Donation::all();
$don->items;

但我无法做到这一点。

标签: phpmysqllaravel

解决方案


它不起作用,因为 laravel 遵循一个关系规则:

请记住,Eloquent 会自动确定 Comment 模型上正确的外键列。按照惯例,Eloquent 将采用拥有模型的“蛇形”名称并以 _id 为后缀。所以,对于这个例子,Eloquent 会假设 Comment 模型的外键是 post_id。

所以你可以通过提供本地和外国身份证来尝试

所以它看起来像这样

捐赠模型 类捐赠扩展模型 { protected $guarded =[];

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

    public function items(){
        return $this->belongsTo(DonationItems::class, 'donation_item_id', 'id');
    }
} 

捐赠物品型号:

class DonationItems extends Model
{
    protected $guarded=[];

    public function donation(){
        return $this->hasMany(DonationItems::class, 'id', 'donation_item_id');
    }
}

我是从头开始写的,您可能需要交换本地和外国身份证


推荐阅读