CakePHP 3 `setEntityClass()` для содержащейся таблицы

Что я имею

  • ТортPHP 3.6
  • PostsTable belongsTo AuthorsTable

Что я хочу

  1. Выберите сообщения, содержащие их авторов
  2. В одном конкретном случае используйте пользовательский объект для авторов

Что я пробовал

Много гуглил, ничего не нашел. Приходилось импровизировать.

// in my controller action:
// set custom class for authors
$authorsTable->setEntityClass('App\Model\Entity\AuthorCustom');
// get authors
$results = $authorsTable->find('all');

Это прекрасно работает.

// in my controller action:
// set custom class for authors
$authorsTable->setEntityClass('App\Model\Entity\AuthorCustom');
// get products including categories
$results = $postsTable->find('all')->contain($authorsTable);

Это не работает, потому что contain() не принимает экземпляр таблицы.

Кто-нибудь знает способ установить другой объект только для одного вызова find()?


person aexl    schedule 30.07.2018    source источник
comment
Почему именно вам нужно сделать это в первую очередь? Какую проблему это решит?   -  person ndm    schedule 31.07.2018
comment
@ndm Мне нужно, чтобы объект вел себя по-другому, когда я готовлю его для конечной точки API Google. Я не хотел загромождать основной объект этой логикой, поэтому подумал об использовании отдельного объекта только для этого.   -  person aexl    schedule 31.07.2018


Ответы (1)


Это не работает, потому что contain() принимает массив|строку|null, а вы пытаетесь передать ему экземпляр Table. Передайте ему имя таблицы вместо используемого для гидратации:

// in my controller action:
// set custom class for authors
$authorsTable->setEntityClass('App\Model\Entity\AuthorCustom');
// get products including categories
$results = $postsTable->find('all')->contain($authorsTable->getTable());
person Derek Fulginiti    schedule 31.07.2018