PHP code example of icings / partitionable
1. Go to this page and download the library: Download icings/partitionable library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
icings / partitionable example snippets
// ...
use Icings\Partitionable\ORM\AssociationsTrait;
class ArticlesTable extends \Cake\ORM\Table
{
use AssociationsTrait;
public function initialize(array $config): void
{
// ...
$this
->partitionableHasMany('TopComments')
->setClassName('Comments')
->setLimit(3)
->setSort([
'TopComments.votes' => 'DESC',
'TopComments.id' => 'ASC',
]);
}
}
$articlesQuery = $this->Articles
->find()
->contain('TopComments');
[
'title' => 'Some Article',
'top_comments' => [
[
'votes' => 10,
'body' => 'Some Comment',
],
[
'votes' => 9,
'body' => 'Some Other Comment',
],
[
'votes' => 8,
'body' => 'And Yet Another Comment',
],
],
]
// ...
use Icings\Partitionable\ORM\AssociationsTrait;
class StudentsTable extends \Cake\ORM\Table
{
use AssociationsTrait;
public function initialize(array $config): void
{
// ...
$this
->partitionableBelongsToMany('TopGraduatedCourses')
->setClassName('Courses')
->setThrough('CourseMemberships')
->setLimit(3)
->setSort([
'CourseMemberships.grade' => 'ASC',
'CourseMemberships.id' => 'ASC',
])
->setConditions([
'CourseMemberships.grade IS NOT' => null,
]);
}
}
$studentsQuery = $this->Students
->find()
->contain('TopGraduatedCourses');
[
'name' => 'Some Student',
'top_graduated_courses' => [
[
'name' => 'Some Course',
'_joinData' => [
'grade' => 1,
],
],
[
'body' => 'Some Other Course',
'_joinData' => [
'grade' => 2,
],
],
[
'body' => 'And Yet Another Course',
'_joinData' => [
'grade' => 3,
],
],
],
]
$this
->partitionableHasMany('TopComments', [
'className' => 'Comments',
'limit' => 1,
'singleResult' => false,
'filterStrategy' => \Icings\Partitionable\ORM\Association\PartitionableHasMany::FILTER_IN_SUBQUERY_TABLE,
'sort' => [
'TopComments.votes' => 'DESC',
'TopComments.id' => 'ASC',
],
]);
$articlesQuery = $this->Articles
->find()
->contain('TopComments', function (\Cake\ORM\Query\SelectQuery $query) {
return $query
->limit(10)
->order([
'TopComments.votes' => 'DESC',
'TopComments.id' => 'ASC',
]);
});
$this->Articles->TopComments
->getEventManager()
->on('Model.beforeFind', function ($event, \Cake\ORM\Query\SelectQuery $query, \ArrayObject $options) {
if (($options['partitionableQueryType'] ?? null) === 'fetcher') {
$query
->limit(10)
->order([
'TopComments.votes' => 'DESC',
'TopComments.id' => 'ASC',
]);
}
return $query;
});
$this
->partitionableHasMany('TopComments')
->setClassName('Comments')
->setLimit(1)
->setSort([
'TopComments.votes' => 'DESC',
'TopComments.id' => 'ASC',
]);
[
'title' => 'Some Article',
'top_comment' => [
'votes' => 10,
'body' => 'Some Comment',
],
]
[
'title' => 'Some Article',
'top_comments' => [
[
'votes' => 10,
'body' => 'Some Comment',
],
[
'votes' => 5,
'body' => 'Some Other Comment',
],
],
]
$this
->partitionableHasMany('TopComments')
->setClassName('Comments')
->setLimit(1)
->disableSingleResult()
->setSort([
'TopComments.votes' => 'DESC',
'TopComments.id' => 'ASC',
]);
[
'title' => 'Some Article',
'top_comments' => [
[
'votes' => 10,
'body' => 'Some Comment',
],
],
]
use Icings\Partitionable\ORM\Association\PartitionableHasMany;
// ...
$this
->partitionableHasMany('TopComments')
->setClassName('Comments')
->setFilterStrategy(PartitionableHasMany::FILTER_IN_SUBQUERY_TABLE)
->setLimit(3)
->setSort([
'TopComments.votes' => 'DESC',
'TopComments.id' => 'ASC',
]);