Как писать запросы MySQL в CakePHP 3

Я пытаюсь сделать систему входа в систему в CakePHP 3.

Вот запрос:

 $user_details = $this->User->find('first', ['conditions'=>['email_id'=$email, 'password'=>$password]]);

if(!empty($user_details)){

$this->request->session()->write('user_email'=>$user_details['email_id']);
$this->request->session->write('user_id'=>$user_details['id');

}

Можете ли вы рассказать о различиях между cakephp 2 и cakephp 3 относительно написания запросов?

0

Решение

Попробуйте этот запрос, он отлично работает для вас …

$user_details = $this->User->find('first', ['conditions'=>['User.email_id'=$email, 'User.password'=>$password]]);

в противном случае вы получите помощь от http://book.cakephp.org/3.0/en/controllers/components/authentication.html

0

Другие решения

Для аутентификации пользователей вы должны использовать компонент Аутентификация. Это служит наилучшей реализацией в CakePHP, так как автоматически связывает все данные с сервером и запросом.

public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', [
'loginAction' => [
'controller' => 'Users',
'action' => 'login',
'plugin' => 'Users'
],
'authError' => 'Did you really think you are allowed to see that?',
'authenticate' => [
'Form' => [
'fields' => ['username' => 'email']
]
],
'storage' => 'Session'
]);
}

Пожалуйста, обратитесь к документации: http://book.cakephp.org/3.0/en/controllers/components/authentication.html


Чтобы ответить на ваш оригинальный вопрос

Cake 2 использует автоматическую функцию со структурой массива для построения запросов, что довольно хитро. Запрос выполняется непосредственно по вызову.

array(
'conditions' => array('Model.field' => $thisValue), //array of conditions
'recursive' => 1, //int
//array of field names
'fields' => array('Model.field1', 'DISTINCT Model.field2'),
//string or array defining order
'order' => array('Model.created', 'Model.field3 DESC'),
'group' => array('Model.field'), //fields to GROUP BY
'limit' => n, //int
'page' => n, //int
'offset' => n, //int
'callbacks' => true //other possible values are false, 'before', 'after'
)

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html

В Cake 3 запрос строится с использованием объекта построителя запросов. Это изменяет SQL при каждом последующем вызове. Это выполняется только после того, как вы позвоните.

$query = $articles->find('all')
->where(['Articles.created >' => new DateTime('-10 days')])
->contain(['Comments', 'Authors'])
->limit(10);

Здесь объект манипулируется ссылочным SQL при каждом вызове (where, contain, limit).

Запрос выполняется после применения execute(), first(), toArray() и т. д., где toArray() возвращает набор данных в виде массива, а другие в виде объекта.

Дальнейшее чтение: http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector