Я пытаюсь сделать систему входа в систему в 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 относительно написания запросов?
Попробуйте этот запрос, он отлично работает для вас …
$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
Для аутентификации пользователей вы должны использовать компонент Аутентификация. Это служит наилучшей реализацией в 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