Php Laravel 7一对多关系?

Php Laravel 7一对多关系?,php,mysql,laravel,Php,Mysql,Laravel,以下是所有型号、迁移和控制器 捐赠模式 类捐赠扩展模型 { 受保护的$guarded=[]; 公共功能用户(){ 返回$this->hasMany(用户::类); } 公共职能项目(){ 返回$this->belongsTo(捐赠项::类); } } 捐赠物品型号: class DonationItems extends Model { protected $guarded=[]; public function donation(){ return $thi

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

捐赠模式

类捐赠扩展模型
{
受保护的$guarded=[];
公共功能用户(){
返回$this->hasMany(用户::类);
}
公共职能项目(){
返回$this->belongsTo(捐赠项::类);
}
}
捐赠物品型号:

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

    public function donation(){
        return $this->hasMany(DonationItems::class, 'id', 'donation_item_id');
    }
}
类捐赠项扩展了模型
{
受保护的$guarded=[];
公益捐赠(){
返回$this->hasMany(donation::class);
}
}
捐赠项目迁移:

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

    public function donation(){
        return $this->hasMany(DonationItems::class, 'id', 'donation_item_id');
    }
}
public function up()
{
Schema::create('generation_items',函数(Blueprint$表){
$table->id();
$table->string('category');
$table->timestamps();
});
}
捐赠迁移:

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

    public function donation(){
        return $this->hasMany(DonationItems::class, 'id', 'donation_item_id');
    }
}
public function up()
{
架构::创建(‘捐赠’)函数(Blueprint$表){
$table->id();
$table->string('item');
$table->unsignedInteger('user_id');
$table->unsignedInteger('捐赠\项目\ id');
$table->timestamps();
});
}
在我的控制器中,我希望访问以下项目:

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

但我无法做到这一点。

这不起作用,因为拉雷维尔遵循一条关系规则:

记住,Eloquent将自动确定注释模型上正确的外键列。按照惯例,Eloquent将使用拥有模型的“snake case”名称并在其后面加上_id。因此,在本例中,Eloquent将假定注释模型上的外键是post_id

因此,您可以尝试提供本地和外国id

所以它看起来像这样

捐赠模式 类捐赠扩展模型 { 受保护的$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');
    }
}

我是从我的头脑中写的,你可能需要交换本地和外国ID,这是你的要求:捐赠有很多物品,一个物品属于捐赠吗?这里还有一个类型:return$this->hasMany(
Donation
::class)你有一个额外的
i
@user3532758是的,我发现了打字错误,我想知道一个用户捐赠了一些东西,所以哪个类别的物品属于哪一类,或者是食品医疗服务之类的。为什么不尝试一下急切加载..try
捐赠::with('items')->get()
另外,
捐赠
DontationItems类中的关系应该是一个
belogsTo
关系。您有一个打字错误,您需要这样调用
$don=捐赠::find(1);$don->items;
@user3532758尝试过急切加载{$donor->categories->categories}'但当我在视图中执行此操作时,它不会给我必需的字段,它显示此集合实例上不存在此错误属性[category.**当按方法执行[code>SQLSTATE[42S22]:未找到列:1054未知列'where子句'中的'generation\u items.generation\u item\u id'(SQL:select*fromgeneration\u items`where
generation\u items
generation\u item\u id
generation\u item\u id
不为空)`在dontation items模型中,关系需要是
$this->有许多(donation::class,'id',generation\u item\u id'))
@WaheedSindhani为什么不试着按照文档示例进行练习呢?文档非常好。然后只需将
(捐赠项目::类,'捐赠项目id','id');
更改为
(捐赠项目::类,'id','捐赠项目id);