Связь между таблицами (hasOne) Объект класса ... не может быть преобразован в строку - PullRequest
0 голосов
/ 28 июня 2018

У меня есть 2 таблицы, одно из изображений которых относится к нескольким разным таблицам, а в другой таблице ссылка на id_imagen с идентификатором таблицы изображений.

Таблица документов:

id | id_imagen | титуло | Texto

Таблица изображений:

id | табла | Imagen | типо

Отношения:

Doumentos.id_imagen = Imagenes.id

В модель изображений я положил:

$this->belongsTo('Escudos', [
          'className' => 'Documentos',
          'foreignKey' => 'id_imagen',
          'conditions' => ['tabla' => 'escudos']
        ]);

В модель документов я положил:

$this->hasOne('Imagenes');

В контроллере документов:

$imagenes = TableRegistry::get('Imagenes');
$documentos = TableRegistry::get('Documentos');

$documentos = $imagenes->$documentos
                        ->find('all')
                        ->select(['Documentos.id', 'Documentos.titulo', 'Documentos.texto', 'Imagenes.imagen'])
                        ->all();
$this->set('documentos', $documentos);

Я получаю следующую ошибку:

Предупреждение (4096): объект класса App \ Model \ Table \ DocumentosTable не может преобразовать в строку [APP / Controller / DocumentosController.php, строка 21]

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

В итоге я нашел решение:

Таблица документов:

$this->hasOne('Imagenes')
             ->setBindingKey('id_imagen')
             ->setForeignKey('id');

Таблица изображений:

$this->belongsTo('Documentos')
            ->setForeignKey('id_imagen')
            ->setJoinType('INNER');

Контроллер документации:

public function Documento() {
    $documentos = TableRegistry::get('Documentos');

    $documentos = $documentos->find('all')
                       ->contain(['Imagenes']);
    $this->set('documentos', $documentos);
  }

вид:

<?= $documento->imagen->imagen; ?>
0 голосов
/ 28 июня 2018

Посмотрите, что вы делаете в очереди 21:

$imagenes->$documentos

Вы передаете $documentos как правильное имя для доступа к $imagenes, это, конечно, не сработает, поскольку $documents - это объект, как следует из сообщения об ошибке.

Переменная documentos не должна быть там во-первых. Вы хотите запросить по $imagenes:

$imagenes->find()->/* ... */

Помимо того, что ваши ассоциации настроены неправильно, ассоциация Escudos должна быть hasOne (другая таблица имеет внешний ключ), а ассоциация Imagenes должна быть belongsTo (текущая таблица имеет внешний ключ). Кроме того, поскольку вы используете нестандартные имена столбцов, вы должны как минимум настроить внешний ключ для ассоциации Imagenes.

...