CakePHP 3-从数据库检索单个字段的最简单方法

BadHorsie

在CakePHP 2中,我可以执行以下操作:

$name = $this->User->field('name', ['email' => '[email protected]']);

在CakePHP 3中,您必须执行以下操作才能实现相同的目的:

$users = TableRegistry::get('Users');

$query = $users->find()
    ->select('name')
    ->where(['email' => '[email protected]']);

$name = $query->isEmpty() ? null : $query->first()->name;

有没有更简单的方法来执行此类操作?我对新的ORM不太熟悉。


编辑:我添加了一个类的示例,该类为Cake 3添加了此行为:

https://stackoverflow.com/a/42136955/851885

BadHorsie

可以通过自定义行为将此功能添加到任何表中。

另存为src / Model / Behavior / EnhancedFinderBehavior.php


<?php
namespace App\Model\Behavior;

use Cake\ORM\Behavior;

/**
 * EnhancedFinder behavior
 * 
 * Behavior providing additional methods for retrieving data.
 */
class EnhancedFinderBehavior extends Behavior
{

    /**
     * Retrieve a single field value
     * 
     * @param  string $fieldName The name of the table field to retrieve.
     * @param  array $conditions An array of conditions for the find.
     * @return mixed The value of the specified field from the first row of the result set.
     */
    public function field($fieldName, array $conditions)
    {
        $field = $this->_table->getAlias() . '.' . $fieldName;
        $query = $this->_table->find()->select($field)->where($conditions);

        if ($query->isEmpty()) {
            return null;
        }
        return $query->first()->{$fieldName};
    }
}

注意:对于3.4之前的CakePHP版本,请将代码更改为$this->_table->alias(),不建议使用,以支持getAlias()更高版本。


用法

将行为添加到您的班级:

<?php
namespace App\Model\Table;

use Cake\ORM\Table;

class UsersTable extends Table
{

    public function initialize(array $config)
    {
        $this->addBehavior('EnhancedFinder');
    }
}

现在,您可以像蛋糕2一样使用查找器:

$name = $this->User->field('name', ['id' => 1]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CakePHP 3-仅允许在实体上保存特定字段的最简单方法

来自分类Dev

使用无脂肪框架从数据库检索单个字段的最简单方法?

来自分类Dev

CakePHP 3检索关联的数据

来自分类Dev

CakePHP 3:检索深层关联

来自分类Dev

CakePHP 3:修改查找数据

来自分类Dev

在CakePHP 3中检索相关数据(hasMany)

来自分类Dev

CakePHP 3:未知方法

来自分类Dev

使用cakephp 3从不同的数据库检索关联的模型

来自分类Dev

在CakePHP 3中连接多个数据库

来自分类Dev

Cakephp 3更新查询未更新我的数据库

来自分类Dev

cakephp 3中的多个数据库连接

来自分类Dev

CakePHP 3:在组件中缓存数据库对象

来自分类Dev

更改 cakephp3 中的默认数据库

来自分类Dev

数据库中的 CakePHP 3 会话表

来自分类Dev

查找方法cakephp 3中的字段限制

来自分类Dev

CakePHP 3.x数据库迁移插件:是否可以更改表字段?

来自分类Dev

CakePHP 3.x-根据语言环境设置获取数据库字段

来自分类Dev

Cakephp 3.x检查用户是否存在于数据库中的方法

来自分类Dev

CakePHP 3包含选择字段

来自分类Dev

CakePHP 3:添加额外的字段以从模板访问

来自分类Dev

CakePHP 3:迁移不会保存更新数据

来自分类Dev

Cakephp 3,更新关联的属于数据

来自分类Dev

CakePHP 3删除特定的关联数据

来自分类Dev

在cakephp 3中保存数据

来自分类Dev

CakePHP 3:从多个表中选择数据

来自分类Dev

cakephp 3 相关模型数据的表单验证

来自分类Dev

从 asscoaied 模型 cakephp3 中检索字段

来自分类Dev

Cakephp 3 回调方法未达到

来自分类Dev

cakephp 3 方法在休息路线中删除