Php 外键关系在拉雷维尔不起作用

Php 外键关系在拉雷维尔不起作用,php,laravel-5,laravel-4,laravel-5.3,Php,Laravel 5,Laravel 4,Laravel 5.3,我制作了两张表格清单和清单图片。Inventory表的主键是Inventory_images表的外键,现在我正在尝试获取同一个Inventory的所有图像,但得到错误。 这是我的密码 库存模型: /** * The table name that should be hidden from other modules */ protected $table = 'inventories'; protected $PrimaryKey = 'id'; public function te

我制作了两张表格清单和清单图片。Inventory表的主键是Inventory_images表的外键,现在我正在尝试获取同一个Inventory的所有图像,但得到错误。 这是我的密码

库存模型:

/**
 * 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');
}
库存图像模型:

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);

有人能帮我找出问题吗

您的代码中有一些错误,您应该先解决这些错误(这可能有助于您解决问题)

首先,覆盖主键的变量名应该是
$primaryKey
,而不是
$primaryKey
(变量名通常以小写字母开头)。 不过,这不会有任何影响,因为Laravel假定主键字段的名称为
id

更重要的是,在这两种情况下,您都在使用
belongsTo
方法,尽管在一种情况下它应该是
hasMany
。在1-n关系中,父模型应该返回
hasMany
关系,而子模型(用外键保存列)应该返回
belongsTo

此外,hasMany或belongsTo方法的第二个参数是外键列名,以防它与模型的snake-case表示不同(由
\u-id
附加)。因此,如果您的
inventory\u images
表中的外键列的名称不同于
inventory\u id
,则需要使用正确的名称传递第二个参数。我假设您的外键名为
I\u id
,因此需要将其传递给这两个函数

请检查这是否有效:

/**
 * 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');
}

错误是什么?调用模型[App\Inventory]上的未定义关系[test]。这是一个错误我尝试了您的解决方案,但现在在尝试获取非对象的属性时遇到另一个错误