Managing entity persistence
No matter how you created your repository, they always implement the same RepositoryInterface
and while act exactly
the same. Let's say you want to insert a new entity into your layout, you'd do something like this:
<?php
$repository->insert(new SampleEntity('test'));
Similary, when you want to update the record, you'd call the update()
method:
<?php
$repository->update($changedSampleEntity);
In the same way, you can also delete a record from the layout:
<?php
$repository->delete($oldSampleEntity);
Please note that both update()
and delete()
only work with entities which you retrieved via the repository (also
known as managed entities). If you try to pass an entity to those methods which is not known by the repository, you will
get an exception. By default, both update()
and delete()
will instruct the FileMaker Server to only execute that
command when the mod-id
is the same as the one from the local entity to avoid changing records which were modified in
another place. You can disable that behaviour by passing true
to the second $force
parameter of those methods.
Retrieving entities through a simple search
Repositories offer multiple ways, to retrieve entites. The simplest one is by calling the find()
method with a record
ID of the record you want to retrieve. The result will either be an instance of that entity or null:
<?php
$sampleEntity = $repository->find(1);
Similary, there is a findBy()
and a findOneBy()
method for either retrieving multiple records or a single one with
a simple field search. Both methods take an array field search values, where the array key is the field name and the
array value is the actual search. By default, the search value is automatically quoted. If you need to perform more
advanced searches, you can pass false
to the $autoQuoteSearch
parameter and do required quoting manually by passing
the value to quote to the quoteString()
method. For details about the different search options, please refer to the
FileMaker documentation.
If you only want to retrieve all records from the layout without filterinig, there's also a findAll()
method. All
methods which return multiple records also accept a $sort
parameter for sorting the results, as well as a $limit
and
$offset
parameter.
Performing complex searches
While the findBy()
and findOneBy()
methods will always perform an AND
query. something you may want to make OR
queries or mixed queries. To allow this, the repository exposes two methods, namely findByQuery()
and
findOneByQuery()
. Both work similar to the prior two methods, but instead of a search array they take a FindQuery
object:
<?php
use Soliant\SimpleFM\Repository\Query\FindQuery;
use Soliant\SimpleFM\Repository\Query\Query;
$query = new FindQuery();
$query->addOrQueries(
new Query('ID', '1'),
new Query('ID', '2'),
);
$query->addAndQueries(
new Query('Name', 'foo'),
new Query('Status', 'closed', true)
);
$sampleEntities = $respository->findByQuery($query);
This will query will look for any record which ID
is either 1 or 2 and which Name
equals "foo", but the Status
field must not be "closed".
Query quoting
Values in a find query are never quoted automatically, so you'll need to quote those values manually via the
quoteString()
method of the repository.