首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查模型的任何字段是空的还是空的?

如何检查模型的任何字段是空的还是空的?
EN

Stack Overflow用户
提问于 2015-06-18 08:28:53
回答 3查看 3.3K关注 0票数 4

我有个模特,$userModel。我想检查这个模型的字段的null是否为空。

现在我正在用一个大的if声明来做这件事。

代码语言:javascript
运行
复制
if(!empty($userModel->name) && !empty($userModel->address) ... && !empty($userModel->email))
{
   // All fields have values
}

这种方式是可行的,但是如果以后我需要向模型中添加另一个字段,那么我需要返回到if,并在那里添加另一个&&条件。

我怎么能在一张支票里做到这一点?

有什么像:$userModel::model()->areAllFieldsFilled();吗?

额外信息:模型已经保存在db中,不需要用户输入。这只是我检查一个特定模型有多完整,绝不是所有这些字段都需要在数据库中,只有少数几个。像$userModel->bio这样的东西通常是留给null的。

我想避免检查5-10个字段。我不想一个巨人,如果这必须维持当模型改变。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-18 08:36:06

PHP允许您使用迭代对象的属性。可以使用空()简化每个属性的检查。

代码语言:javascript
运行
复制
$allHaveValues = TRUE;
foreach ($userModel as $key => $value) {
    if (empty($value)) {
       $allHaveValues = FALSE;
       break;
    }
}

if ($allHaveValues) {
    // Do something...
}
票数 4
EN

Stack Overflow用户

发布于 2015-06-18 08:31:58

使用empty()

代码语言:javascript
运行
复制
if(!empty($userModel->name)) { .. }

空() DOCS

  • "“(空字符串)
  • 0 (0作为整数)
  • 0.0 (0作为浮点数)
  • "0“(0作为字符串)
  • 错误
  • 数组()(空数组)
  • $var;(声明的变量,但没有值)

更新

代码语言:javascript
运行
复制
$modelData = array($userModel->name, $userModel->address, $userModel->email);
if(!in_array('', $modelData) && !in_array(null, $modelData)) { .. }

数组()

或者你可以用array_intersect -

代码语言:javascript
运行
复制
if(empty(array_intersect(array('', null), $modelData))) { .. }

intersect()

票数 0
EN

Stack Overflow用户

发布于 2015-06-18 08:43:15

我觉得你不需要这么做。

所有你需要的-它只是指定你的验证规则。

例如:

代码语言:javascript
运行
复制
<?php

class Brand extends CActiveRecord
{
    public function tableName()
    {
        return 'brand';
    }

    public function rules()
    {
        return [
            ['name, country', 'on' => 'insert'],
            ['name', 'type', 'type' => 'string', 'on' => 'insert'],
            ['name', 'length', 'max' => 100, 'on' => 'insert'],
            ['name', 'type', 'type' => 'array', 'on' => 'search'],
            ['country', 'type', 'type' => 'string'],
            ['country', 'length', 'max' => 50],
        ];
    }
}

当您使用此模型时,只需通过$model->validate()验证该模型,如果该模型失败,则使用$model->getErrors()显示错误。此外,您还可以指定您希望使用的规则场景。例如:$model->senario = 'search';将用于验证规则search,属性name应该是数组。但是当场景insert名称应该是长度不超过100的字符串时。

在我的示例字段中:名称,插入所需的国家(['name, country', 'on' => 'insert'])。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30910210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档