CakePHP v3.9.3 association belongsTo() Entity Controller Template

1.Apache ,MySQl start

2.Table

3.Entity

4.Controller

5.View Template

 



1.Apache ,MySQl start

Database name:mydata

table name:       people  messages

people

Column TypeLengthIndexA_INULL
idINT PRIMARYON 
nameVARCHAR100   
mailVARCHAR200  ON
ageINT    

 

 

messages

ColumnTypeLengthIndexA_I
idINT PRIMARYON
person_idINT   
messageVARCHAR6553565535 
created_atDATATIME   

 

 

2.Table

①MessagesTable.php

C:\xampp\htdocs\mycakeapp\src\Model\Table

<?php
namespace App\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class MessagesTable extends Table {

    public function initialize(array $config) {
        parent::initialize($config);
        $this->setDisplayField('message');
        $this->belongsTo('People');
    }

    public function validationDefault(Validator $validator) {
        $validator
            ->allowEmpty('id', 'create');

        $validator
            ->integer('person_id', 'person idは整数で入力下さい。')
            ->notEmpty('person_id', 'person idは必ず記入下さい。');

        $validator
            ->scalar('message', 'テキストを入力下さい。')
            ->requirePresence('message', 'create')
            ->notEmpty('message', 'メッセージは必ず記入して下さい。');
        return $validator;

    }

}

?>

 

 

②PeopleTable.php

C:\xampp\htdocs\mycakeapp\src\Model\Table

<?php
namespace App\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class PeopleTable extends Table {

    public function initialize(array $config){
        parent::initialize($config);
        $this->setDisplayField('name');
        $this->hasMany('Message');
    }

    public function findMe(Query $query, array $options){
        $me = $options['me'];
        return $query->where(['name like' => '%' . $me . '%'])
            ->orWhere(['mail like' => '%' . $me . '%'])
            ->order(['age'=>'asc']);
    }
    
    public function findByAge(Query $query, array $options){
        return $query->order(['age'=>'asc'])->order(['name'=>'asc']);
    }
    
    public function validationDefault(Validator $validator){
        $validator
            ->integer('id','idは整数で入力下さい。')
            ->allowEmpty('id','create');
            
        $validator
            ->scalar('name','テキストを入力下さい。')
            ->requirePresence('name','create')
            ->notEmpty('name','名前は必ず記入して下さい。');
            
        $validator
            ->scalar('mail','テキストを入力下さい。')
            ->allowEmpty('mail')
            ->email('mail',false,'メールアドレスを記入して下さい。');
            
        $validator
            ->integer('age','整数を入力下さい。')
            ->requirePresence('age', 'create')
            ->notEmpty('age','必ず値を入力下さい。')
            ->greaterThan('age',-1,'ゼロ以上の値を記入下さい。');
        
        return $validator;
    }
}
?>

 

3.Entity

Message.php

C:\xampp\htdocs\mycakeapp\src\Model\Entity

<?php
namespace App\Model\Entity;

use Cake\ORM\Entity;

class Message extends Entity {


    protected $_accessible = [
        'person_id' => true,
        'message' => true
    ];
}

?>

 

 

4.Controller

MessagesController.php

C:\xampp\htdocs\mycakeapp\src\Controller

<?php

namespace App\Controller;

use App\Controller\AppController;
use Cake\I18n\Time;

class MessagesController extends AppController {

    public function index() {
        if ($this->request->is('post')){
            $data = $this->request->data['Messages'];
            $entity = $this->Messages->newEntity($data);
            $entity->created_at = new Time(date('Y-m-d H:i:s'));
            $this->Messages->save($entity);
        } else {
            $entity = $this->Messages->newEntity();
        }
        $data = $this->Messages->find('all')
            ->contain(['People'])
            ->order(['created_at'=>'desc']);
        $this->set('data', $data);
        $this->set('entity', $entity);

    }
}
?>

 

5.View Template

index.ctp

C:\xampp\htdocs\mycakeapp\src\Template\Messages

 

<p>This is People table records.</p>
<?=$this->Form->create($entity,
    ['type'=>'post',
    'url'=>['controller'=>'Messages',
        'action'=>'index']]) ?>
<fieldset class="form">
    person id
    <?= $this->Form->error('Messages.person_id'); ?>
    <?=$this->Form->text('Messages.person_id') ?>
    Message
    <?= $this->Form->error('Messages.message'); ?>
    <?=$this->Form->text('Messages.message') ?>
    <?=$this->Form->submit('投稿') ?>
</fieldset>
<?=$this->Form->end() ?>


<hr>
<table>
<thead><tr>
    <th>ID</th><th>Message</th><th>name</th><th>created at</th>
</tr></thead>
<?php foreach($data->toArray() as $obj): ?>
<tr>
    <td><?=h($obj->id) ?></td>
    <td><?=h($obj->message) ?></td>
    <td><?=h($obj->person->name) ?></td>
    <td><?=h($obj->created_at) ?></td>
</tr>
<?php endforeach; ?>
</table>

 

 

6.

http://localhost/mycakeapp/messages

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值