Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel雄辩,如何定义与版本控制的关系_Php_Laravel_Laravel Eloquent - Fatal编程技术网

Php Laravel雄辩,如何定义与版本控制的关系

Php Laravel雄辩,如何定义与版本控制的关系,php,laravel,laravel-eloquent,Php,Laravel,Laravel Eloquent,我有一个带有版本数据的产品模型,我有一个可以有一个或多个产品的类别模型。当我想删除一个类别时,代码必须检查是否有与该类别相关的产品。如何定义关系,使其在删除前转到products\u version表以检查category\u id是否存在 这是我的产品型号: use Versionable, SoftDeletes; protected $fillable = ['product_name', 'supplier', 'unit', 'pieces', 'desired_stock', 'c

我有一个带有版本数据的产品模型,我有一个可以有一个或多个产品的类别模型。当我想删除一个类别时,代码必须检查是否有与该类别相关的产品。如何定义关系,使其在删除前转到
products\u version
表以检查
category\u id
是否存在

这是我的产品型号:

use Versionable, SoftDeletes;

protected $fillable = ['product_name', 'supplier', 'unit', 'pieces', 'desired_stock', 'current_stock', 'category_id', 'price'];

public $timestamps = true;

public $versioned = ['category_id', 'product_name', 'supplier','unit','desired_stock','current_stock','price','pieces', 'deleted_at'];

public function parent()
{
    return $this->belongsTo('App\Category');
}
产品版本控制正在运行。我使用了以下代码:

我的类别模型:

public function products()
{
    return $this->hasMany('App\Product');
}
我用来检查是否有与该类别相关的产品的代码:

public function destroy($id)
{
    // delete
    $category = Category::withCount('products')->where('id', '=', $id)->first();

    if ($category->products_count > 0) {
        Session::flash('message', 'Can not delete category');
    } else {
        $category->delete();
        // redirect
        Session::flash('success', 'Category deleted');
    }
    return Redirect::to('categories');
}
我收到的错误消息是:

SQLSTATE[42S22]:未找到列:1054未知列 “where子句”中的“products.category\u id”(SQL:select
categories
)。, (从上的
products
internaljoin
products\u version
中选择count()
产品
id
=
产品版本
ref\u id
产品\u版本
版本
=
产品
最新\u版本
其中
类别
id=
产品
类别id
products\u version
deleted\u at
为空)作为来自的
products\u计数
类别
其中
id
=1限制1)

这可能会奏效:

 $category = Category::withCount('products' => function($q) {
     $q->where('id', '=', $id);
 })->first();

您可能需要一些类似于
的东西,通过
关系有很多

public function products()
{
    return $this->hasManyThrough('App\Product', 'App\ProductVersion');
}
因此,它将通过
ProductVersion
Category
链接到
Product
,因为
'Category\u id'
仅存在于
ProductVersion

查看更多信息


另外,您可能需要为
products\u version
表创建
ProductVersion
模型,因为
products\u version
表上不存在
category\u id
,所以这将不起作用。只能在
products\u version
上显示您的迁移吗?因为产品表中似乎没有类别id。@frogeyedman他在
products\u version
中有类别id,请参见
public$versioned=['category\u id',…]
可能他在
$versioned
中有它,但不在他的表中,因为错误显示在我的产品版本表中,我确实有一个category\u id列。您如何定义关系?因为包使用ref_id和版本来匹配当前版本。因此,关系不是基于1个字段,而是基于2个字段,我如何使用
有许多槽
语法访问和/或定义“产品”实体?您可以定义键参见示例:未工作。目前的问题是,我的查询中有两个内部联接,但由于以下错误而无法工作:非唯一表/别名:laravelDirection使用
hasManyThrough
是正确的,但需要一些自定义,如果我想到一个解决方案,我将在这里发布它。