【问题标题】:Laravel 7 One To Many Relations?Laravel 7 一对多关系?
【发布时间】:2020-07-20 07:11:13
【问题描述】:

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

捐赠模式

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;

但我无法做到这一点。

【问题讨论】:

  • 这是你的要求吗:捐赠有很多物品,一个物品属于一个捐赠?这里还有一个类型: return $this->hasMany(Donaition::class) 你有一个额外的i
  • @user3532758 是的,我发现了错字,我想知道用户捐赠了一些东西,所以它属于哪个类别项目,或者它是一种食品医疗服务。
  • 为什么不试试急切加载。 laravel.com/docs/7.x/eloquent-relationships#eager-loading。试试Donation::with('items')->get() 另外,DontationItems 类中的donation 关系应该是belogsTo 关系。
  • 你打错字了,需要这样调用$don = Donation::find(1); $don->items;
  • @user3532758 尝试急切加载 `{{$donnor->categories->category}}' 但是当我这样做时,在我看来它没有给我我的必填字段它显示此错误 此集合实例上不存在属性 [类别]。

标签: php mysql laravel


【解决方案1】:

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

请记住,Eloquent 会自动确定 Comment 模型上正确的外键列。按照惯例,Eloquent 将采用拥有模型的“蛇形”名称并以 _id 为后缀。所以,对于这个例子,Eloquent 会假设 Comment 模型的外键是 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');
    }
}

我在写你可能需要交换本地和外国身份证

【讨论】:

  • **当你用你的方法SQLSTATE[42S22]: Column not found: 1054 Unknown column 'donation_items.donation_item_id' in 'where clause' (SQL: select * from donation_items` 时会出现这个错误,其中donation_items.donation_item_id = 1 和donation_items.donation_item_id 不为空)`
  • 在捐赠物品模型中,关系必须是$this->hasMany(Donaition::class, 'id', 'donation_item_id');
  • @WaheedSindhani 为什么不尝试按照文档示例进行练习?文档非常好。
  • 然后把(DonationItems::class, 'donation_item_id', 'id');改成(DonationItems::class, 'id', 'donation_item_id);
猜你喜欢
  • 2020-11-12
  • 2018-06-15
  • 2018-09-27
  • 2017-12-24
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
相关资源
最近更新 更多