Thinkphp中如何表达MYSQL中的某字段不为空is not null

Thinkphp 的文档经常不够完整的表达MYSQL的各种组合,很多东西需要被尝试后才能知道,笔者就遇到过一个问题,MYSQL查询语句中有个表达式is not null ,在thinkphp中就不能用“=” 或者简单的eq等来表示。
有一种变相的处理方法就是直接把where中的array参数换成string,即比如我要查询某表的pic不为空

$data = D('tablename');
$data->where("pic is not null")->select();

 

而有时候我已经写了一堆的array参数,实在不愿意为了一个字段改变整体格式,
经过多次测试发现了TP还是支持MYSQL不为空的array编写方式的,即

$data = D('tablename');
$map = array();
$map['pic'] = array('exp','is not null');

 

其中的exp表示MYSQL的表达式查询,支持各种MYSQL语句的添加
该写法同时支持在update中对字段进行自动增值
比如
SQL语句

update table set data=data+1;

用THINKPHP可以表达为

$data['data'] = array('exp','data+1');
$table->where(1)->save($data);

原文链接:http://www.thinkphp.cn/code/1693.html 

 

要使用ThinkPHP实现商品多规格的保存,可以考虑使用数据库的两个表来实现: 1. `product` 表:存储商品的基本信息,如商品名称、描述、价格等。 2. `product_spec` 表:存储商品的规格信息,如颜色、尺寸、库存等。 其,`product` 表和 `product_spec` 表之间可以使用 `product_id` 字段进行关联。 下面是一个简单的示例: 1. 创建数据库表 ```sql CREATE TABLE `product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `description` text NOT NULL, `price` decimal(10,2) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `product_spec` ( `id` int(11) NOT NULL AUTO_INCREMENT, `product_id` int(11) NOT NULL, `color` varchar(255) NOT NULL, `size` varchar(255) NOT NULL, `stock` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `product_id` (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 2. 创建模型 创建一个 `Product` 模型和一个 `ProductSpec` 模型,用于操作 `product` 表和 `product_spec` 表。 ```php // application/common/model/Product.php namespace app\common\model; use think\Model; class Product extends Model { protected $table = 'product'; public function specs() { return $this->hasMany(ProductSpec::class, 'product_id'); } } // application/common/model/ProductSpec.php namespace app\common\model; use think\Model; class ProductSpec extends Model { protected $table = 'product_spec'; public function product() { return $this->belongsTo(Product::class); } } ``` 3. 创建控制器 创建一个 `ProductController` 控制器,用于处理商品的增删改查操作。 ```php // application/admin/controller/ProductController.php namespace app\admin\controller; use app\common\model\Product; use app\common\model\ProductSpec; use think\Request; class ProductController extends BaseController { public function index() { $products = Product::with('specs')->select(); return $this->success('获取成功', $products); } public function create(Request $request) { $data = $request->post(); $product = new Product(); $product->name = $data['name']; $product->description = $data['description']; $product->price = $data['price']; $product->save(); $specs = $data['specs']; foreach ($specs as $spec) { $productSpec = new ProductSpec(); $productSpec->product_id = $product->id; $productSpec->color = $spec['color']; $productSpec->size = $spec['size']; $productSpec->stock = $spec['stock']; $productSpec->save(); } return $this->success('添加成功'); } public function update(Request $request, $id) { $data = $request->post(); $product = Product::get($id); $product->name = $data['name']; $product->description = $
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值