1: model-create a database

Posted under » CakePHP on 11 Dec 2018

From cake's official cookbook. Create this database.

USE cake_cms;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
created DATETIME,
modified DATETIME
);

CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
slug VARCHAR(191) NOT NULL,
body TEXT,
published BOOLEAN DEFAULT FALSE,
created DATETIME,
modified DATETIME,
UNIQUE KEY (slug),
FOREIGN KEY user_key (user_id) REFERENCES users(id)
) CHARSET=utf8mb4;

CREATE TABLE tags (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(191),
created DATETIME,
modified DATETIME,
UNIQUE KEY (title)
) CHARSET=utf8mb4;

CREATE TABLE articles_tags (
article_id INT NOT NULL,
tag_id INT NOT NULL,
PRIMARY KEY (article_id, tag_id),
FOREIGN KEY tag_key(tag_id) REFERENCES tags(id),
FOREIGN KEY article_key(article_id) REFERENCES articles(id)
);

You may have noticed that the articles_tags table used a composite primary key. CakePHP supports composite primary keys almost everywhere allowing you to have simpler schemas that don’t require additional id columns. The table and column names above are using CakePHP’s naming conventions. While CakePHP is flexible enough to accommodate almost any database schema, adhering to the conventions will save you time and headaches.

Insert the following

INSERT INTO users (email, password, created, modified)
VALUES
('cakepmespace App\Model\Entity;
use Cake\ORM\Entity;
class Article extends Entity
{
protected $_accessible = [
'*' => true,
'id' => false,
'slug' => false,
];
}hp@example.com', 'sekret', NOW(), NOW());

INSERT INTO articles (user_id, title, slug, body, published, created, modified)
VALUES
(1, 'First Post', 'first-post', 'This is the first post.', 1, now(), now());

Next replace the values in the Datasources.default array in your "config/app.php" file with those that apply to your setup. A sample completed configuration array might look something like the following:

return [
// More configuration above.
'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
'username' => 'cake',
'password' => 'AngelF00dC4k3~',
'database' => 'kueh',
'encoding' => 'utf8mb4',
'timezone' => 'UTC',
'cacheMetadata' => true,
    ],
  ],
// More configuration below.
];

Once you’ve saved your "config/app.php" file, you should see that ‘CakePHP is able to connect to the database’ section have a green chef hat. You still have a long way to go before you see something,

Models

Cake Models enable us to read and modify our data(base). They allow us to build relations between our data, validate data, and apply application rules. Models build the foundations necessary to build our controller actions and templates. Models are composed of Table and Entity objects.

Table objects provide access to the collection of entities stored in a specific table. They are stored in src/Model/Table. The file we’ll be creating will be saved to "src/Model/Table/ArticlesTable.php".

CakePHP will dynamically create a model object for you if it cannot find a corresponding file in src/Model/Table. This also means that if you accidentally name your file wrong (i.e. articlestable.php or ArticleTable. php), CakePHP will not recognize any of your settings and will use the generated model instead.

<¿php
// src/Model/Table/ArticlesTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
class ArticlesTable extends Table
{public function initialize(array $config)
 {$this->addBehavior('Timestamp'); }
}

The Timestamp behavior will automatically populate the created and modified columns of our table. By naming our Table object ArticlesTable, CakePHP can use naming conventions to know that our model uses the articles table. CakePHP also uses conventions to know that the id column is our table’s primary key.

Entities

Entities represent a single record in the database, and provide row level behavior for our data. Our entity will be saved to "src/Model/Entity/Article.php".

<¿php
// src/Model/Entity/Article.php
namespace App\Model\Entity;
use Cake\ORM\Entity;
class Article extends Entity
{ protected $_accessible = [
'*' => true,
'id' => false,
'slug' => false,
  ];
}

We’ve only setup the _accessible property which controls how properties can be modified by Mass Assignment. We can’t do much with our models right now, so next we’ll create our first Controller and Template to allow us to interact with our model.

See also

web security linux ubuntu python django git Raspberry apache mysql php drupal cake javascript css AWS data