我正试图为我的模型设置一个新的特性或类似物
我在我的数据库mysql中有一些关系,我正在使用laravel 5.6
我有一些表包含'is_approved'列
现在我想创建一些东西,当我为我的一个表设置is_approved为false时,所有其他与该表有关系的表,更新为我选择的值。
我怎样才能做到这一点?
例如:
我有这些表:
-product_type [columns: 'id', 'type_name', 'is_approved']
-product_brand [columns: 'id', 'type_id', 'brand_name', 'is_approved']
-product_model [columns: 'id', 'brand_id', 'model_name', 'is_approved']
-product_name [columns: 'id', 'model_id', 'product_name', 'is_approved']
并且所有这些表都有'is_approved'列
我想,当我将product_type记录'is_approved'列中的一个设置为false时,所有I关系记录都更新为false
你可以在你的模特上使用Events。
将列更新到其他表。您需要手动设置type_id。像这样:
$productbrand = ProductBrand::where('type_id', $type_id)->update(['is_approved' => 1]);
$productmodel = ProductModel::where('brand_id', $productbrand->id)->update(['is_approved' => 1]);
$productname = ProductName::where('model_id', $productmodel->id)->update(['is_approved' => 1]);
或者您可以使用触发器执行此操作。有关更多详细信息,请阅
http://www.expertphp.in/article/laravel-53-creating-mysql-triggers-from-migration-with-example
您可以使用ON UPDATE CASCADE属性将is_approved
列作为所有外键的一部分:
create table product_type(
id int auto_increment primary key,
type_name varchar(50),
is_approved tinyint,
index(id, is_approved)
);
create table product_brand (
id int auto_increment primary key,
type_id int,
brand_name varchar(50),
is_approved tinyint,
index(id, is_approved),
foreign key (type_id, is_approved)
references product_type(id, is_approved)
on update cascade
);
create table product_model (
id int auto_increment primary key,
brand_id int,
model_name varchar(50),
is_approved tinyint,
index(id, is_approved),
foreign key (brand_id, is_approved)
references product_brand(id, is_approved)
on update cascade
);
create table product_name (
id int auto_increment primary key,
model_id int,
product_name varchar(50),
is_approved tinyint,
foreign key (model_id, is_approved)
references product_model(id, is_approved)
on update cascade
);
qazxsw poi的更改将自动更改qazxsw poi中的相应行。 product_type
的变化将导致product_brand
的变化。 product_brand
的变化将导致product_model
的变化。