I'm trying to use the ORM RedBeanPHP (v3.3) in a ZF2 (v2.0.2) application and I'm having trouble with its automatic FUSE model. I can't make it link to my model classes. It's not picking them up automatically and using "regular" beans instead.
I'm using the RjhRedbean module to load up RedBean in ZF2.
My model class is the following, placed in the folder .\module\Check\src\Check\Model\Model
.
<?php
namespace Check\Model;
use \RedBean_SimpleModel;
class Model_Check extends RedBean_SimpleModel
{
public $id;
public $type;
...
public function open()
{
}
public function toArray()
{
return array($this->id, $this->type);
}
I confirm it's picked up by the autoloader since $c = new Model_Check();
works.
My controller code trying to load all the Check
model objects from the DB is:
<?php
namespace Check\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;
use RjhRedbean;
use Check\Model\Model_Check;
class CheckController extends AbstractActionController
{
public function listAction()
{
$rb = $this->getServiceLocator()->get('RjhRedbean');
$checks = $rb->findAll('Check'); // does not link to my Model object
foreach ($checks as $check) {
$ar = $check->toArray(); // does not exist in the objects returned
...
The objects returned are RedBean_OODBBean
What should I put as the bean name in the findAll()
method? I tried:
$checks = $rb->findAll('Model_Check');
$checks = $rb->findAll('Check/Model/Check');
$checks = $rb->findAll('Check/Model/Model_Check');
Nothing seems to do the trick. When creating a bean, I get the same problems too...
Thanks.
The reason that this isn't working is that FUSE cannot automatically find the Model for the bean as it would normally do due to problems introduced in using namespaces.
You can work around this problem by using a class map file and defining all Models that you are using in there. Making sure you models are in the global namespace.
More information and examples can be found on my blog: How to use FUSE models in RjhRedbean