我制作了两张表库存和库存图片。 Inventory表的主键是inventory_images表的外键,现在我正在尝试获取相同库存的所有图像但是收到错误。 这是我的代码
库存模型:
/**
* The table name that should be hidden from other modules
*/
protected $table = 'inventories';
protected $PrimaryKey = 'id';
public function test(){
return $this->belongsTo('App\InventoryImage', 'i_id');
}
InventoryImage模型:
protected $table = 'inventory_images';
protected $PrimaryKey = 'id';
public function inv_det(){
return $this->belongsTo('App\Inventory', 'id');
}
控制器:
$inventory = Inventory::with('test')->orderBy('id', 'DESC')->paginate('10');
dd($inventory);
有人可以帮我找出问题
答案 0 :(得分:1)
您在代码中犯了一些错误,您应首先解决这些错误(这可能有助于您解决问题)。
首先,覆盖主键的变量名应为$primaryKey
而不是$PrimaryKey
(变量名通常始终以小写字母开头)。
这应该没有任何影响,因为Laravel假设主键字段无论如何都被命名为id
。
更重要的是,在两种情况下都使用belongsTo
方法,尽管在一种情况下它应该是hasMany
。在1-n关系中,父模型应返回hasMany
关系,子模型(使用外键保存列)belongsTo
。
此外,hasMany或belongsTo方法的第二个参数是外键列名,如果它与模型的蛇案例表示不同(由_id
附加)。因此,如果您的inventory_images
表具有除inventory_id
之外的不同名称的外键列,则需要使用正确的名称传递第二个参数。我假设你的外键名是i_id
,所以你需要将它传递给两个函数。
https://laravel.com/docs/5.4/eloquent-relationships#one-to-many
请检查一下是否有效:
/**
* The table name that should be hidden from other modules
*/
protected $table = 'inventories';
protected $primaryKey = 'id';
public function test(){
return $this->hasMany('App\InventoryImage', 'i_id');
}
和子表:
protected $table = 'inventory_images';
protected $primaryKey = 'id';
public function inv_det(){
return $this->belongsTo('App\Inventory', 'i_id');
}