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:selectcategories
)。,
(从上的products
internaljoinproducts\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
是正确的,但需要一些自定义,如果我想到一个解决方案,我将在这里发布它。