外交关系不在laravel工作

时间:2017-08-08 06:46:13

标签: php laravel-5 laravel-4 laravel-5.3

我制作了两张表库存和库存图片。 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);

有人可以帮我找出问题

1 个答案:

答案 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');
}