CakePHP 3-Самый простой способ получить одно поле из базы данных
в CakePHP 2 я мог бы сделать что-то вроде этого:
$name = $this->User->field('name', ['email' => 'user@example.com']);
в CakePHP 3 Вы должны сделать что-то вроде этого, чтобы достичь того же самого:
$users = TableRegistry::get('Users');
$query = $users->find()
->select('name')
->where(['email' => 'user@example.com']);
$name = $query->isEmpty() ? null : $query->first()->name;
есть ли более простой способ выполнения таких операций? Я не очень хорошо знаком с новым Ормом.
Edit: я добавил пример класса, который добавляет Это поведение для Cake 3:
3 ответов
Это может быть проще, чем ваша
$users = TableRegistry::get('Users');
$name = $users->get(1)->name;
убедитесь, что при использовании функции get параметр должен быть первичным ключом в таблице.
нет, нет в CakePHP 3.x.
Если вы хотите, чтобы этот метод вернулся, реализуйте его либо в поведении, либо как искатель, используя признак, и используйте его с объектами таблицы.
можно добавить эту функцию в любую таблицу с помощью пользовательского поведения.
Сохранить как src / модель / поведение / 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->alias() . '.' . $fieldName;
$query = $this->_table->find()->select($field)->where($conditions);
if ($query->isEmpty()) {
return null;
}
return $query->first()->{$fieldName};
}
}
использование
добавьте поведение в свой класс:
<?php
namespace App\Model\Table;
use Cake\ORM\Table;
class UsersTable extends Table
{
public function initialize(array $config)
{
$this->addBehavior('EnhancedFinder');
}
}
Теперь вы можете использовать finder, как торт 2:
$name = $this->User->field('name', ['id' => 1]);