在CakePHP 3.x中,按单值查询HasMany关联可以通过使用contain()和matching()方法来实现。下面是一个完善且全面的答案:
在CakePHP 3.x中,按单值查询HasMany关联可以通过以下步骤实现:
// src/Model/Table/UsersTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
class UsersTable extends Table
{
public function initialize(array $config)
{
$this->hasMany('Posts');
}
}
// src/Controller/UsersController.php
namespace App\Controller;
use App\Controller\AppController;
class UsersController extends AppController
{
public function view($id)
{
$user = $this->Users->find()
->contain(['Posts' => function ($q) use ($id) {
return $q->matching('Posts', function ($q) use ($id) {
return $q->where(['Posts.id' => $id]);
});
}])
->where(['Users.id' => $id])
->first();
$this->set('user', $user);
}
}
在上面的代码中,我们使用contain()方法包含了Posts模型,并使用matching()方法进行单值查询。在matching()方法中,我们使用where()方法来指定查询条件,即帖子ID等于给定的ID。
<!-- src/Template/Users/view.ctp -->
<h1><?= $user->name ?></h1>
<h2>Posts:</h2>
<ul>
<?php foreach ($user->posts as $post): ?>
<li><?= $post->title ?></li>
<?php endforeach; ?>
</ul>
在上面的代码中,我们通过$user->posts来访问用户的帖子,并使用foreach循环来显示每个帖子的标题。
这就是在CakePHP 3.x中按单值查询HasMany关联的方法。通过使用contain()和matching()方法,我们可以轻松地查询关联模型中的特定值。如果您想了解更多关于CakePHP的信息,可以访问腾讯云的CakePHP产品介绍页面:CakePHP产品介绍。
领取专属 10元无门槛券
手把手带您无忧上云